|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- >>> class C:
- def __getattr__(self, name):
- print(1)
- def __getattribute__(self, name):
- print(2)
- def __setattr__(self, name, value):
- print(3)
- def __delattr__(self, name):
- print(4)
-
- >>> c = C()
- >>> c.x = 1
- # 位置一,请问这里会显示什么?
- >>> print(c.x)
- # 位置二,请问这里会显示什么?
复制代码
想问一下为什么print(c.x)不显示1呢,不是给赋值为1了吗
因为你在调用 __getattribute__ 时只会打印 2 而不做其他事。
或者你可以这样(调用父类的方法):
- >>> class C:
- def __getattr__(self, name):
- print(1)
- return super().__getattr__(name)
- def __getattribute__(self, name):
- print(2)
- return super().__getattribute__(name)
- def __setattr__(self, name, value):
- print(3)
- return super().__setattr__(name, value)
- def __delattr__(self, name):
- print(4)
- return super().__delattr__(name)
-
- >>> c = C()
- >>> c.x = 1
- 3
- >>> print(c.x)
- 2
- 1
复制代码
|
|