2017-03-25 2 views
1

클래스의 객체를 반복하여 속성을 추출 할 수 있습니까?클래스의 인스턴스화 된 객체를 반복하십시오.

예를 들어. 코드 아래에서 이러한 객체 마이크, 이름 - 마이크, 자동으로 모든 인스턴스를 추적하지 않는 연령 20

class Person(object): 
    def__init__(self,name,age): 
    self.name = name 
    self.age = age 


mike = Person('Mike',20) 
john = Person('John',20) 
jack = Person('Jack',20) 
adam = Person('Adam',20) 

감사

답변

2

파이썬 클래스 각 개체에 대한 것이다 출력을 반복 한 후.

class Person(object): 
    people = [] 

    def __init__(self, name, age): 
     self.name = name 
     self.age = age 
     self.people.append(self) 

클래스 속성을 사용하면 사용자를 추적하는 별도의 개체를 가질 수 있습니다. 여기서 Person.people 속성은 프로세스의 단일 전역 값이며 클래스의 유용성과 테스트 가능성을 제한 할 수 있습니다. 당신은 몇 가지 코드를 추가하지 않으면 해당 클래스의 모든 인스턴스를 통해

반복하려면
>>> mike = Person('Mike', 20) 
>>> vars(mike) 
{'age': 20, 'name': 'Mike'} 

이 불가능합니다 : 반복하려면

+0

(HTTPS입니다 잭 오전 20 입니다 : //docs.python.org/3/library/weakref.html), 클래스에 의해 추적되는 인스턴스 * 만 *을 릴리스 할 수 있습니다. – jonrsharpe

+0

안녕하세요 감사합니다 그러나 각 개체의 위치 및 개체 및 해당 특성의 이름을 인쇄합니다,이 위치 또는 않는 데 추출 할 수 있는지 여부를 몰라? – Jaff

+0

각 속성을 인쇄하거나 클래스에'__repr__' 메소드를 정의한 다음 인쇄하십시오. https://docs.python.org/3/reference/datamodel.html#object.__repr__ – jsbueno

1

은 주어진 인스턴스의 속성은, 난 당신이 내장 함수 vars을 찾고 있다고 생각 인스턴스 목록을 직접 관리해야합니다.

+0

감사합니다. 나를이 기능에 대해 알게하기 때문에 특정 상황에서는 매우 유용 할 수 있지만이 문제에 대한 나의 목적에는 부합하지 않습니다. 귀하의 회신에 감사드립니다. – Jaff

1

제 이해가 맞으면, 반원에게 반복을 묻습니다. 다음과 같이 처리 할 수 ​​있습니다.

class person(object): 
    def __init__(self,name,age): 
     self.name=name 
     self.age=age 
for name,age in {'mike':20,'john':20,'jack':20}.iteritems(): 
    p = person(name,age) 
    print ('I am %s my age is %d' %(p.name,p.age)) 
내 나이가 내가 20 입니다 내가 마이크입니다

대답 ## 존 내 나이는 내 나이는 잠재적 [약한 참조] 수 (20)

+0

그러나이 솔루션에서는 수동으로 인스턴스화 한 모든 객체의 속성을 나열해야하므로 클래스를 직접 루핑하지 않습니다. – Jaff

관련 문제