class Base(object): PRODUCT = 1 CLIENT = PRODUCT * 10 class Base1(Base): PRODUCT = 2 print(Base.CLIENT) print(Base1.CLIENT) 请问 Base1 的 CLIENT 要怎么才能变成 20, 不重复写 CLIENT 的表达式情况下

class Base(object): PRODUCT = 1 CLIENT = PRODUCT * 10 class Base1(Base): PRODUCT = 2 print(Base.CLIENT) print(Base1.CLIENT) 请问 Base1 的 CLIENT 要怎么才能变成 20, 不重复写 CLIENT 的表达式情况下
1 yingxiangyu Feb 7, 2024 没办法 |
2 Leviathann Feb 7, 2024 改成 getter |
3 ohiomiky Feb 7, 2024 2 楼说的对 覆写__attr__相关函数 |
4 plko345 OP |
5 ohiomiky Feb 7, 2024 覆写__getattr__ 函数 但是没啥意义 还不如重复定义 client |
6 error451 Feb 7, 2024 这么搞就不符合类设计的逻辑 类静态变量,你却要求他是可变的, 为什么要这样呢? |
7 XIVN1987 Feb 7, 2024 `` python class Base(object): PRODUCT = 1 @property def CLIENT(self): return self.PRODUCT * 10 class Base1(Base): PRODUCT = 2 print(Base().CLIENT) print(Base1().CLIENT) ``` |
10 Alias4ck Feb 7, 2024 可以用描述器解决你的问题 ``` class ClientDescriptor: def __get__(self, instance, owner): return owner.PRODUCT * 10 class Base(object): PRODUCT = 1 CLIENT = ClientDescriptor() class Base1(Base): PRODUCT = 2 ``` |