Python 类继承时覆盖类属性的问题

91 天前
 plko345
class Base(object):
    PRODUCT = 1

    CLIENT = PRODUCT * 10


class Base1(Base):
    PRODUCT = 2


print(Base.CLIENT)
print(Base1.CLIENT)

请问 Base1 的 CLIENT 要怎么才能变成 20, 不重复写 CLIENT 的表达式情况下

1250 次点击
所在节点    Python
10 条回复
yingxiangyu
91 天前
没办法
Leviathann
91 天前
改成 getter
wkj89
91 天前
2 楼说的对 覆写__attr__相关函数
plko345
91 天前
@Leviathann
@wkj89
是改为 `print(getattr(Base1, 'CLIENT'))` 这样吗? 试了不行, 应该是我理解错了吧
wkj89
91 天前
覆写__getattr__ 函数 但是没啥意义 还不如重复定义 client
error451
91 天前
这么搞就不符合类设计的逻辑
类静态变量,你却要求他是可变的, 为什么要这样呢?
XIVN1987
91 天前
``` 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)
```
plko345
91 天前
@error451 恩, 我想应该是我的设计有问题, 我把这部分移到类外部处理试试
wkj89
91 天前
@plko345
你按 7 楼的方法就行
Alias4ck
91 天前
可以用描述器解决你的问题

```
class ClientDescriptor:
def __get__(self, instance, owner):
return owner.PRODUCT * 10
class Base(object):
PRODUCT = 1
CLIENT = ClientDescriptor()
class Base1(Base):
PRODUCT = 2

```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1014897

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX