python 实例化以后属性更新问题

本人刚刚接触Python, 目前使用python 3.6, 遇到了一点关于类属性的问题, 代码如下:

class A():
    def __init__(self):
        self.x = 0
        self.y = 0
        self.z = [self.x, self.y]    def add_one(self):
        self.x += 1
        # self.z = [self.x, self.y]a = A()
a.add_one()
print(a.x) # 1print(a.z) # [0, 0]

问题如下:
假设在add_one方法里面没有self.z = [self.x, self.y]这段代码, 可以发现虽然x是更新了, 但是z并没有随着x的更新而更新, 除非手动加上这段代码才可以实现更新, 请问这是为什么?

另外请教一下有没有其他可以更加简便的方法进行对属性的更新? 因为目前这种代码更新起来很麻烦, 增加一个更新方法就需要将所有被更新的属性手动更新一次

愿有前辈能指点一下, 若有表述不当, 请见谅!


江户川乱折腾
浏览 758回答 1
1回答

沧海一幻觉

用@property 将函数包装为属性python3>>> class A():     def __init__(self):         self.x = 0         self.y = 0             @property # 将函数包装为属性     def z(self):         return [self.x, self.y]    def add_one(self):         self.x += 1         >>> a=A()>>> a.add_one()>>> a.x1>>> a.z [1, 0]>>>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python