【发布时间】:2015-09-02 03:23:45
【问题描述】:
对于创建实例将具有许多(不可默认)变量的类,是否存在普遍接受的最佳实践?
例如,通过显式参数:
class Circle(object):
def __init__(self,x,y,radius):
self.x = x
self.y = y
self.radius = radius
使用**kwargs:
class Circle(object):
def __init__(self, **kwargs):
if 'x' in kwargs:
self.x = kwargs['x']
if 'y' in kwargs:
self.y = kwargs['y']
if 'radius' in kwargs:
self.radius = kwargs['radius']
或使用属性:
class Circle(object):
def __init__(self):
pass
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
@property
def y(self):
return self._y
@y.setter
def y(self, value):
self._y = value
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
self._radius = value
对于实现少量实例变量的类(如上面的示例),似乎自然的解决方案是使用显式参数,但随着变量数量的增加,这种方法很快变得不守规矩。当实例变量的数量增长很长时,是否有首选方法?
【问题讨论】:
-
您似乎混合了两件事:传递给类的参数和存储在实例上的属性。您的第三个示例与其他示例完全不同,因为在创建实例时没有传递任何参数。您是否关心参数或属性,或者特别是指定属性值的参数?
-
在这种情况下,我关心实例的属性。我意识到第三个示例的不同之处在于创建实例时没有传入任何参数,但是我可以使用我提供的三个类中的任何一个来有效地创建同一个实例,不是吗?