Python:如何在对象的属性发生更改时更改其实例?

2024-09-28 22:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个自定义对象,我希望它在每次调用它的一个方法时返回一个新的对象实例,或者最好是更改一些属性。即

>>> A = Class1("I am A")
>>> B = A.setString("I am B")
>>> A.getString()
"I am A"
>>> B.getString()
"I am B"

有没有一个简单的方法可以做到这一点

此外,我的对象中有一个子类列表,当我更改子类对象时,我还希望父类的实例也更改。例如:

>>> C = Class2(A) 
>>> D = Class2.getClass1().setString("I am B")
>>> C.getClass1()
"I am A"
>>> D.getClass1()
"I am B"

有没有一个好的方法来做这件事?谢谢


Tags: 对象实例方法列表属性am子类class1
3条回答

您需要创建虚拟方法,它通过Python中的agregation生成

class Class1:
    def __init__(self, string):
        self.string = string
    def getString(self):
        print(self.string)
    def setString(self, string):
        return Class1(string)

A = Class1("I am A")
B = A.setString("I am B")
A.getString() # I am A
B.getString() # I am B

像这样的

class Class1:
    def __init__(self, string):
        self.string = string
    def set_string(self, string):
        return Class1(string)
    def get_string(self):
        return self.string

我认为你可以有多个实现你所要求的。你可能想告诉我们你想做什么。这可能是一个XY问题

以下是我的贡献:

from copy import deepcopy

class Test:
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return "I am {}".format(self.name)

    def set_name(self, name):
        new = deepcopy(self)
        new.name = name
        return new

if __name__ == '__main__':
    A = Test("A")
    B = A.set_name("B")
    print(A) # I am A
    print(B) # I am B

相关问题 更多 >