用 super() 覆盖 属性
Override a property with super()
我想覆盖此 parent 属性 以使其成为有条件的标志:
@property
def velocity(self):
"""Instantaneous velocity in km/h."""
if self.time is not None:
dt = np.diff(self.seconds)
dd = np.diff(self.distance)
vs = 3600 * dd / dt
return self._resample(vs, self.seconds)
else:
return None
我可以在 child:
中用类似的东西轻松做到这一点
@property
def velocity(self, flag=True):
if flag:
if self.time is not None:
dt = np.diff(self.seconds)
dd = np.diff(self.distance)
vs = 3600 * dd / dt
return self._resample(vs, self.seconds)
else:
return None
但是我不应该也可以这样做而不是复制代码 vebatim 吗?如果我这样做,“supered”函数总是 returns None,无论标志还是 self.time 都没有改变(并且不是 None):
@property
def velocity(self, flag=True):
if flag:
super().velocity
尝试return super().velocity
@property
def velocity(self, flag=True):
if flag:
return super().velocity
使用 @decorator
的要点是您可以将方法调用为 obj.velocity
。没有括号,没有参数。现在 obj.velocity
returns 某些东西(数据框?)obj.velocity(False)
将尝试 调用 带有参数 False
的数据框。这会失败..
你可以使 flag
成为一个 class 变量:
class SomeClass:
FLAG = False
@property
def velocity(self):
if SomeClass.FLAG:
return super().velocity
并且如前所述:您需要 return
方法中的值。
我想覆盖此 parent 属性 以使其成为有条件的标志:
@property
def velocity(self):
"""Instantaneous velocity in km/h."""
if self.time is not None:
dt = np.diff(self.seconds)
dd = np.diff(self.distance)
vs = 3600 * dd / dt
return self._resample(vs, self.seconds)
else:
return None
我可以在 child:
中用类似的东西轻松做到这一点@property
def velocity(self, flag=True):
if flag:
if self.time is not None:
dt = np.diff(self.seconds)
dd = np.diff(self.distance)
vs = 3600 * dd / dt
return self._resample(vs, self.seconds)
else:
return None
但是我不应该也可以这样做而不是复制代码 vebatim 吗?如果我这样做,“supered”函数总是 returns None,无论标志还是 self.time 都没有改变(并且不是 None):
@property
def velocity(self, flag=True):
if flag:
super().velocity
尝试return super().velocity
@property
def velocity(self, flag=True):
if flag:
return super().velocity
使用 @decorator
的要点是您可以将方法调用为 obj.velocity
。没有括号,没有参数。现在 obj.velocity
returns 某些东西(数据框?)obj.velocity(False)
将尝试 调用 带有参数 False
的数据框。这会失败..
你可以使 flag
成为一个 class 变量:
class SomeClass:
FLAG = False
@property
def velocity(self):
if SomeClass.FLAG:
return super().velocity
并且如前所述:您需要 return
方法中的值。