首页 > 解决方案 > 有没有办法在python中访问另一个对象的属性

问题描述

我正在尝试创建三个类,一个主要存储一个人的属性,另外两个将访问一个人的实例并做很多事情来调整它的属性值。

我想以单独的方式保存它们,以便轻松管理每个类中的内容并进行扩展。我认为这不是继承问题,所以我的代码显然是错误的目标,但我不知道应该做什么。


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']

标签: pythonobjectinstance

解决方案


如果我理解正确,您希望您的ShopRecreation对象共享其基础CreatePerson对象。但是您的代码没有这样做。如@mike scotty评论所述,您传入Joe,但不要将 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']

所以现在 Shop 和 Recreation 不是 a 的实例CreatePerson,但它们确实CreatePerson在其构造函数中采用 a ,并存储对该人的引用。当你调用add_element这些对象时,它们会调用add_element它们拥有的新方法CreatePerson

我只想指出,我认为这不是完全正确的抽象——你的商店只有一个人,你的娱乐也是如此。但为了回答这个问题,我只是从表面上看。

希望对您有所帮助,快乐编码!


推荐阅读