|
20鱼币
本帖最后由 yumjang 于 2019-8-16 22:37 编辑
- class Const:
- def __setattr__(self, name, value):
- if not name.isupper():
- print("变量名需要大写")
- print(name)
- elif name in self.__dict__:
- print("常量无法改变")
- else:
- self.name = value
- super().__setattr__(name, value)
-
-
- c1 = Const()
复制代码
运行以上代码,如果我给c1赋值一个属性:
结果是:
非常不明白这儿属性名为什么变成了name。
我单独运行下列这个函数:
- class Co:
- def __setattr__(self, name, value):
- print(name)
- print(value)
- if not name.isupper():
- print(123)
- super().__setattr__(name, value)
- co = Co()
- co.ABC = 1
复制代码
得到的结果如同预料:
所以我完全搞不懂为什么最上面这个类的实例,运行出来后,赋值的属性name就真的成了name而不是我赋值时候的输入名ABC...
求大神帮忙看看
第一次执行 name 是 ABC 没错,就执行到第 09 行。09 行 self.name = value,调用 self.__setattr__('name', value),name 参数就自然变成 'name' 了。
|
最佳答案
查看完整内容
第一次执行 name 是 ABC 没错,就执行到第 09 行。09 行 self.name = value,调用 self.__setattr__('name', value),name 参数就自然变成 'name' 了。
|