有没有办法在python中访问另一个对象的属性?

问题描述 投票:0回答:1

我想创建三个类,其中一个主要是存储一个人的属性,另外两个将访问一个人的实例,并做一系列的事情来调整其属性值。

我想把它们分开,这样便于管理每个类的内容和扩展。我认为这不是一个继承问题,所以我的代码显然是错误的目标,但我不知道该怎么做。


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']
python object instance
1个回答
0
投票

如果我理解正确的话,你希望你的 ShopRecreation 对象,以共享其底层的 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人。但为了回答这个问题,我还是照单全收了。

希望能帮到你,祝你编码愉快!

© www.soinside.com 2019 - 2024. All rights reserved.