1 回答

TA贡献1847条经验 获得超11个赞
一种补救方法是也c变成财产A;该属性仅返回(私人)成员self._c:
class A:
def __init__(self):
self.a = 1
self.b = 1
self._c = 1
@property
def c(self):
return self._c
class B(A):
def __init__(self):
super().__init__() # because I want 'a' and 'b', (but not 'c')
self._c = 2
# is already inherited from A
# @property
# def c(self):
# return self._c
a = A()
b = B()
print(a.c) # 1
print(b.c) # 2
如果你不能改变A(并假设你的财产的目的是使c只读),这是一个变体:c.setter如果self._c不是,将引发错误None:
class A:
def __init__(self):
self.a = 1
self.b = 1
self.c = 1
class B(A):
def __init__(self):
self._c = None
super().__init__() # the setter for c will work as self._c = None
self._c = 2 # now we set c to the new value
# (bypassing the setter)
@property
def c(self):
return self._c
@c.setter
def c(self, value):
if self._c is not None:
raise AttributeError
self._c = value
添加回答
举报