루프 내 클래스의 인스턴스를 여러 개 만들고 루프가 독립적 일 것을 기대합니다. 하지만 혼란 스럽지만 동일한 이름으로 새 인스턴스를 만들 때 이전에 만든 인스턴스의 속성을 유지합니다.클래스 인스턴스에 대한 혼란
그래서 내가 좋아하는 뭔가가 : 그래서 그것은 루프 1 시간
class myClass(object):
def __init__(self, i1 = None, i2 = 'X', p1 = [], p2 = []):
self.i1, self.i2 = i1,i2
self.property1 = p1
self.property2 = p2
def doStuff(self):
self.property1.append(self.i1)
self.property2.append(self.i2)
print self.property1
print self.property2
class mySubClass(myClass):
def __init__(self, i1 = None, i2 = 'Z'):
myClass.__init__(self, i1, i2)
inputTuples = (('A', 'B'), ('D', 'E'))
for x,y in inputTuples:
o=mySubClass(x)
pprint(vars(o))
o.doStuff()
print(id(o))
{'i1': 'A', 'i2': 'Z', 'property1': [], 'property2': []}
['A']
['Z']
37087832
{'i1': 'D', 'i2': 'Z', 'property1': ['A'], 'property2': ['Z']}
['A', 'D']
['Z', 'Z']
37088392
를 pprint는 o.property1 = 두 번째로 [] , 그것을 가지고 무엇의 목록입니다 o.property1 보여줍니다 루프의 첫 번째 실행에서 o에 추가됩니다.
나의 이해는 내가 O = myClass가()를 호출 할 때, 그 클래스의 새로운 인스턴스가 생성 될 것이며, 이전 한 (효과적으로 overwrtitten)
가 가사람이 나에게 설명 할 수 파이썬 여기에 작동하는 방법 삭제됩니다했다 어떻게 내가 원하는대로 작동하게 할 수 있을까? 내가
class myClass(object):
def __init__(self, i1 = None, i2 = 'X':
self.i1, self.i2 = i1,i2
self.property1 = []
self.property2 = []
에 클래스를 변경하는 경우
그것은 내가 여기에 근본적인 차이를 이해 해달라고
{'i1': 'A', 'i2': 'Z', 'property1': [], 'property2': []}
['A']
['Z']
37087832
{'i1': 'D', 'i2': 'Z', 'property1': [], 'property2': []}
['D']
['Z']
37088392
잘 작동합니다. 또한 p1과 p2를 입력 변수로 가질 가능성을 어떻게 유지하면서 원하는 동작을 계속 유지할 수 있습니까?
이 코드는 실제로 실행 가능하지 않으며 실제 코드가하는 것을 이해하기 어렵습니다. 질문을 보여주는 [SSCCE] (http://sscce.org)를 만드십시오. – abarnert
필자가 작성한 코드가 이것을 반영하지는 않지만 클래스 변수를 실제로 사용하고 있다고 생각한다. 여기에 표시 한'self.property1 = []'이 아니다. 그것들은 실제로 클래스 인스턴스간에 공유됩니다. 하지만 우리가 실제로 무엇을 가지고 있는지를 알기 위해서 실제로 재현 할 수있는 예제를 만들어야합니다. –
클래스 ('myClass()')를 인스턴스화 할 때마다 새로운 객체를 생성하므로 "덮어 쓰지"않습니다. 그 클래스의 다른 인스턴스들. – astephenb