简单 python 单例继承 class 失败,没有堆栈跟踪
Simple python inheritance with singleton class failing with no stack trace
class B:
@property
def x(self):
print('x getter')
return self.x
@x.setter
def x(self, x) -> None:
print('x setter')
self.x = x + 1
class A(B):
__instance = None
def __new__(self):
''' Virtually private constructor '''
if not A.__instance:
A.__instance = object.__new__(self)
A.__instance.__setup()
return A.__instance
def __setup(self):
self.x = 10
def minus(self):
self.x -= 3
a1 = A()
Class A
是单例 class.
我不确定是什么导致程序失败,因为没有堆栈跟踪,它只是失败了。
您没有正确使用 @property
和 setter。您需要为实际的基础 属性:
取一个不同的名称
class B:
@property
def x(self):
print('x getter')
return self._x
@x.setter
def x(self, x) -> None:
print('x setter')
self._x = x + 1
class B:
@property
def x(self):
print('x getter')
return self.x
@x.setter
def x(self, x) -> None:
print('x setter')
self.x = x + 1
class A(B):
__instance = None
def __new__(self):
''' Virtually private constructor '''
if not A.__instance:
A.__instance = object.__new__(self)
A.__instance.__setup()
return A.__instance
def __setup(self):
self.x = 10
def minus(self):
self.x -= 3
a1 = A()
Class A
是单例 class.
我不确定是什么导致程序失败,因为没有堆栈跟踪,它只是失败了。
您没有正确使用 @property
和 setter。您需要为实际的基础 属性:
class B:
@property
def x(self):
print('x getter')
return self._x
@x.setter
def x(self, x) -> None:
print('x setter')
self._x = x + 1