gpt4 book ai didi

python - 继承Python类同时添加属性

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:32 25 4
gpt4 key购买 nike

我在添加属性时尝试继承 python 类时遇到问题。为了说明这一点,定义以下类:

class A:
def __init__(self, prop, x1, x2):
self.prop = prop
self.x = x1 + x2


class B(A):
def __init__(self, prop, x1, x2):
super().__init__(prop, x1, x2)

@property
def prop(self):
return self._prop

@prop.setter
def prop(self, value):
self._prop = value + 10

现在类B想要调用类A__init__方法,该方法将调用B.prop的二传手。但我不想这样做,而是想直接设置 _prop 。有什么好的方法可以实现这一点吗?

以下是我通过尝试检测我们是否处于 __init__ 中而提出的解决方案,但我想听听一些替代方案。

class B(A):
def __init__(self, prop, x1, x2):
super().__init__(prop, x1, x2)

@property
def prop(self):
return self._prop

@prop.setter
def prop(self, value):
if hasattr(self, '_prop'):
self._prop = value + 10
else:
self._prop = value

最佳答案

您似乎正在寻找一种将子类 B 的实现细节公开给父类 A.__init__ 的方法的方法。我认为这是一种反模式,而不是理想的模式。

如果父类的__init__(设置self.prop)的行为与子类的实现不兼容,那么你应该重写 __init__ 在子类中,以免调用 super().__init__

我同意Jon Clements' comment 。您的代码的目标到底是什么?通常,创建一个类来封装一些有用的行为。当子类大量借鉴父类的行为并且可以在不过多修改父类内部的情况下实现这一点时,从该类继承是有意义的。

关于python - 继承Python类同时添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com