我有一个名为singleExperimentData的父类,其中包含一些参数,其中一个是OD:
class singleExperimentData(object):
def __init__(self):
self.__t = np.array([])
self.__OD = None
@property
def OD(self):
return self.__OD
@OD.setter
def OD(self, OD):
self.__OD = OD
self.checkTimeVectors()
我有另一个继承自singleExperimentData的父类,但我想覆盖setter,以便它不会调用checkTimeVectors:
class singleExperimentDataShell(singleExperimentData):
@singleExperimentData.OD.setter
def OD(self, OD):
self.__OD = OD
我想知道这是否是正确的语法?当我查看变量时,似乎我有几个不同的变量:
_singleExperimentData_OD = [data as expected]
OD = None
我首先使用以下函数将OD设置为timeCourseObject():
self.avg = singleExperimentDataShell()
self.avg.OD = timeCourseObject()
self.avg.OD.dataVec = data
但是我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'dataVec'
请注意"无"是singleExperimentData中的默认数据类型,但即使我已将其设置为timeCourseObject,它似乎也无法工作。我觉得自己在制定者和吸气者方面做错了,但我不确定。
答案 0 :(得分:0)
正如您所发现的,双下划线名称是“受损”。这可以用于创建类 - 私有属性,子类被“阻止”访问。 (我将“阻止”放在引号中,因为可以规避预防。)此行为是documented。
单下划线名称没有此行为。单个下划线纯粹是一种约定,表示属性不属于类的公共API。
您不应该使用双下划线属性名称,除非您确实希望将它们限制为仅通过它们出现的类(而不是子类)访问 。