我曾经在__init__
中初始化私有属性,如下所示(这种初始化方式也很常见)
class Duck():
def __init__(self, input_name):
self.__name = input_name
@property
def name(self):
return self.__name
@name.setter
def name(self, input_name):
self.__name = input_name
# Use private attribute __name internally for other purposes below...
但我只想确定在最开始使用属性是否更安全__init__
,例如,在下一个示例中,对于大于1000或小于0的输入,我想分别计算为1000和0,而不是原始输入值。我好像不能用self.__x = x
class P:
def __init__(self,x):
# If self.__x = x, not desirable
self.x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
if x < 0:
self.__x = 0
elif x > 1000:
self.__x = 1000
else:
self.__x = x
我猜你和Python一起工作。旧样式类不支持属性。把第一行改成
对于后面的属性使用
self._x
还是self.__x
并不重要。只要保持一致,即将构造函数行改回只是不要把
self.x
称为属性。你知道吗编辑: 我想是误会了。下面是我建议的完整代码:
编辑2-实际问题: 我很抱歉,我没有抓住标题和实际问题在这里,但重点是使您的课堂工作。我分心的是,如果你在python2中使用老式的类,setter就不会真正被调用。你知道吗
然后,正如下面的评论对话中所指出的,我对初始化属性还是属性没有明确的答案,但我(个人)会说:
a.如果初始化需要与中执行的相同验证 setter,然后使用属性,否则需要复制 设置器代码。你知道吗
但是,如果要初始化的值不需要验证(例如 例如,将其设置为一个经过先验验证的常量默认值 值),则没有理由使用该属性。你知道吗
相关问题 更多 >
编程相关推荐