在處理數據庫連接時,出於明顯的原因,我使用了單例模式。爲了簡化目的,我簡化了類的定義,問題仍然是一樣的。屬性錯誤,具有屬性方法的單身模式
類:
class Point(object):
_instance = None
def __new__(cls, x, y):
if Point._instance is None:
Point._instance = object.__new__(cls)
Point._instance.x = x
Point._instance.y = y
return Point._instance
def __init__(self, x, y):
self.x = x
self.y = y
@property
def x(self):
return self._x
@x.setter
def x(self, x):
self._x = self._instance.x
@property
def y(self):
return self._y
@y.setter
def y(self, y):
self._y = self._instance.y
def __str__(self):
return 'x: {}, y: {} id.x: {}'.format(self.x, self.y, id(self.x))
它生成以下錯誤:
AttributeError: 'Point' object has no attribute '_x'
我已經發現了以下解決方法:
class Point(object):
_instance = None
def __new__(cls, x, y):
if Point._instance is None:
Point._instance = object.__new__(cls)
Point._instance.x = x
Point._instance.y = y
return Point._instance
def __init__(self, x, y):
self.x = self._instance.x
self.y = self._instance.y
的Python的方式是使用屬性的方法,因此即使我有一個工作代碼,我仍然有這種癢,有人可以向我解釋爲什麼 - 我爲什麼這樣的錯誤。
縮進。好痛。 – jq170727
爲什麼你想要一個Point類是單身人士? – wim
@ jq170727我沒有注意到縮進對不起,我只是從我的編輯過去的代碼。 –