【发布时间】:2018-03-07 02:55:42
【问题描述】:
在处理数据库连接时,出于明显的原因,我使用了单例模式。为简化起见,我已经简化了类定义,问题还是一样。
班级:
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
pythonic 方法是使用属性方法,因此我仍然有那种痒,即使我有一个工作代码,有人可以向我解释为什么 - 为什么我会出现这样的错误。
【问题讨论】:
-
缩进。很痛。
-
为什么要让 Point 类成为单例?!
-
@jq170727 抱歉,我没注意缩进,我只是从我的编辑器中过去了代码。
-
@wim Point 类是题外话,而不是发布所有处理与数据库的连接的代码并失去重点,我在简单的事情上重复了同样的错误。
标签: python python-2.7 python-3.x