我想将继承的变量用作派生类方法的 default 参数之一。我想做类似以下的事情:
class BaseFoo:
_inherited = 'someval'
class Foo(BaseFoo):
def dosomething( bar = _inherited ):
print( bar ) # should print someval if we call dosomething()
我尝试使用super()._ inherited。但是由于super()需要一个实例,因此将其作为默认arg会引发RunTimeError:super()没有参数
我也尝试过使用self._inherited。但是它返回一个NameError,自我未定义。我知道我可以使用self或super()访问函数中的_inherited。但是,如何在定义一些默认参数的同时做到这一点呢?
编辑: 我知道如何访问子类中的继承属性。但是这个问题着重于将它们用作默认参数。对于那些希望访问属性的人,可以参考Accessing attribute from parent class inside child class
答案 0 :(得分:2)
您实际上不能在函数参数中获取继承的属性,因为此处没有定义self
。您可以 从@MarkTolonen shows的父级获取class属性。这可能是您想要的,但这不是一回事。
考虑:
class BaseFoo:
_inherited = 'someval'
class Foo(BaseFoo):
def someAction(self):
self._inherited = "other"
def dosomething(self,bar=BaseFoo._inherited ):
print( bar, self._inherited ) # should print someval if we call dosomething()
f = Foo()
f.someAction() # changes f._inherited to "other"
f.dosomething() # what should be printed? self._inherited or bar?
# prints someval other
如果答案仍然是someval
,那么这将满足您的需要,但是,如果您希望答案是other
,则此方法将不起作用。您将需要使用将默认值设置为None
的模式在函数主体中实际设置值,并检查:
class BaseFoo:
_inherited = 'someval'
class Foo(BaseFoo):
def someAction(self):
self._inherited = "other"
def dosomething(self,bar=None):
if bar is None:
bar = self._inherited
print( bar, self._inherited )
f = Foo()
f.someAction()
f.dosomething()
# prints other other
答案 1 :(得分:1)
您可以直接参考基础:
class BaseFoo:
_inherited = 'someval'
class Foo(BaseFoo):
def dosomething(self,bar=BaseFoo._inherited ):
print( bar ) # should print someval if we call dosomething()
输出:
>>> f = Foo()
>>> f.dosomething()
someval