我想创建三个类,其中一个主要是存储一个人的属性,另外两个将访问一个人的实例,并做一系列的事情来调整其属性值。
我想把它们分开,这样便于管理每个类的内容和扩展。我认为这不是一个继承问题,所以我的代码显然是错误的目标,但我不知道该怎么做。
class CreatePerson():
def __init__(self):
self.to_do_list=[]
class Shop(CreatePerson):
def __init__(self,CreatePerson):
super().__init__()
def add_element(self,a):
self.to_do_list+=[a]
class Recreation(CreatePerson):
def __init__(self,CreatePerson):
super().__init__()
def add_element(self,a):
self.to_do_list+=[a]
if __name__ == '__main__':
joe=CreatePerson()
p1=Shop(joe)
p2=Recreation(joe)
p1.add_element('whole milk')
p2.add_element('reading book')
print(joe.to_do_list)
我希望它能返回下面的内容,但很明显它没有链接到
['whole milk','reading book']
如果我理解正确的话,你希望你的 Shop
和 Recreation
对象,以共享其底层的 CreatePerson
对象。但你的代码并没有这样做。如 @mike scotty
评论说,你在 Joe
但不要用乔做任何事情。所以这些新对象只是创建了自己的 to_do_lists
,这是不共享的。这就是我想象中你想要的东西。
class CreatePerson():
def __init__(self):
self.to_do_list = []
def add_element(self, a):
self.to_do_list += [a]
class Shop():
def __init__(self, CreatePerson):
self.my_person = CreatePerson
def add_element(self, a):
self.my_person.add_element(a)
class Recreation():
def __init__(self, CreatePerson):
self.my_person = CreatePerson
def add_element(self, a):
self.my_person.add_element(a)
>>> joe=CreatePerson()
>>> p1=Shop(joe)
>>> p2=Recreation(joe)
>>> p1.add_element('whole milk')
>>> p2.add_element('reading book')
>>> print(joe.to_do_list)
['whole milk', 'reading book']
所以,现在商店和娱乐是不是一个实例的 CreatePerson
但他们确实需要一个 CreatePerson
的构造函数中,并存储一个对该人的引用。而当你调用 add_element
在这些对象上,他们把新的 add_element
办法,其 CreatePerson
有。
我只想指出,我认为这并不是完全正确的抽象--你的Shop和你的Recreation一样,都有one and only one人。但为了回答这个问题,我还是照单全收了。
希望能帮到你,祝你编码愉快!