每次在python中调用_uinit__;内的自变量时,都会更新它

每次在python中调用_uinit__;内的自变量时,都会更新它,python,class,oop,design-patterns,self,Python,Class,Oop,Design Patterns,Self,我希望init中的自变量在每次调用时更新,例如每次执行Data(10.plot,self.plot应通过将self.n解析到plot类来重新初始化 class Data(object): def __init__(self, n): self.n = n self.plot = Plot(self.n) def minus(self, x): self.n -= x return self.n class Pl

我希望init中的自变量在每次调用时更新,例如每次执行
Data(10.plot
,self.plot应通过将self.n解析到plot类来重新初始化

class Data(object):
    def __init__(self, n):
        self.n = n
        self.plot = Plot(self.n)

    def minus(self, x):
        self.n -= x
        return self.n


class Plot(object):
    def __init__(self, n):
        self.n = n

    def double(self):
        return self.n * 2
另一个例子:当我执行以下代码时,我希望answer变量等于16。相反,它等于20。如何在上述类中实现此行为

data = Data(10)
data.minus(2)
answer = vcf.plot.double())

数据
-对象中不需要
n

class Data(object):
    def __init__(self, n):
        self.plot = Plot(n)

    def minus(self, x):
        self.plot.n -= x    


class Plot(object):
    def __init__(self, n):
        self.n = n

    def double(self):
        return self.n * 2

数据
-对象中不需要
n

class Data(object):
    def __init__(self, n):
        self.plot = Plot(n)

    def minus(self, x):
        self.plot.n -= x    


class Plot(object):
    def __init__(self, n):
        self.n = n

    def double(self):
        return self.n * 2
你想要的是一个。这是一种特殊类型的属性,在获取值时调用自定义getter函数,因此可以使其动态返回正确的绘图

class Data(object):
    def __init__(self, n):
        self.n = n

    @property
    def plot(self):
        return Plot(self.n)

    def __sub__(self, x):
        return Data(self.n - x)
作为旁注,请参阅重写python运算符的步骤

data = Data(10)
data -= 2
answer = data.plot.double()  # Calls the `plot()` function to get a value for `data.plot`.
print(answer)  # 16
另一种方法是将绘图链接到数据,因此当数据发生变化时,绘图不会改变。一种方法是将其作为属性,因此当它更改时,属性也会更改

class Plot(object):
    def __init__(self, data):
        self.data = data

    @property
    def n(self):
        return self.data.n

    @n.setter
    def n(self, x):
        self.data.n = x

    def double(self):
        return self.n * 2

data = Data(10)
plot = Plot(data)
data.minus(2)
answer = plot.double()  # 16
你想要的是一个。这是一种特殊类型的属性,在获取值时调用自定义getter函数,因此可以使其动态返回正确的绘图

class Data(object):
    def __init__(self, n):
        self.n = n

    @property
    def plot(self):
        return Plot(self.n)

    def __sub__(self, x):
        return Data(self.n - x)
作为旁注,请参阅重写python运算符的步骤

data = Data(10)
data -= 2
answer = data.plot.double()  # Calls the `plot()` function to get a value for `data.plot`.
print(answer)  # 16
另一种方法是将绘图链接到数据,因此当数据发生变化时,绘图不会改变。一种方法是将其作为属性,因此当它更改时,属性也会更改

class Plot(object):
    def __init__(self, data):
        self.data = data

    @property
    def n(self):
        return self.data.n

    @n.setter
    def n(self, x):
        self.data.n = x

    def double(self):
        return self.n * 2

data = Data(10)
plot = Plot(data)
data.minus(2)
answer = plot.double()  # 16

谢谢,这似乎很管用。关于您最后的评论,我想知道您是否知道任何设计模式或属性允许我链接这两个类之间的数据?谢谢,这似乎可以做到这一点。关于您最后的评论,我想知道您是否知道任何设计模式或属性允许我链接两个类之间的数据?