2017-11-08 9 views
0

클래스가 __slots__을 덮어 쓰지 않을 때 클래스 인스턴스의 모든 멤버 이름과 값을 가져올 수 있습니다. 예를 들면 : 나는 위의 코드에서 __slots__ = ... 행의 주석을 해제하고 실행하면vars() 또는 __dict___을 사용하지 않고 클래스 멤버 이름과 값을 얻는 방법

class Animal(object): 
    #__slots__ = ('legs','name','color','smell','age','kids') 
    def __init__(self): 
     self.legs = 2 
     self.name = 'Dog' 
     self.color= 'Spotted' 
     self.smell= 'Alot' 
     self.age = 10 
     self.kids = 0 

a = Animal() 

for x in vars(a).items(): 
    print(x[0],x[1]) 

그리고 출력 내가 vars() argument must have __dict__ attribute을 말한다 오류가 발생합니다, 그러나

age 10 
legs 2 
name Dog 
kids 0 
smell Alot 
color Spotted 

입니다.

어쨌든 __slots__을 재정의하면 모든 회원의 이름과 값을 얻을 수 있습니까?

+1

사용'__slots__'를? – kindall

+0

@kindall. 감사. '__slots__ '를 사용하여 이름을 얻을 수 있습니다. 값을 얻으려면 어떻게해야합니까? – Jimbo

+0

사전 comprehension을 사용할 수 있습니다 : 예를 들어'obj'가 객체 인'{k : obj .__ 슬롯 __에서 k에 대해 getattr (obj, k)} '를 사용할 수 있습니다. – kindall

답변

2

이 시도 :

class Animal(object): 
    __slots__ = ('legs','name','color','smell','age','kids') 
    def __init__(self): 
     self.legs = 2 
     self.name = 'Dog' 
     self.color= 'Spotted' 
     self.smell= 'Alot' 
     self.age = 10 
     self.kids = 0 

a = Animal() 

for var in a.__slots__: 
    print(var + '=' + str(getattr(a, var)))