我把这个问题解释为“如何定义默认参数到子类而不定义
__init__
是吗?”。一种可能的方法是将默认值定义为类属性,您可以在父类中访问该属性。
爱因斯坦
:
from unittest import TestCase
class TestCaseSubClass(TestCase):
_default_param = None
def __init__(self, *args, **kwargs):
param = kwargs.pop("param", self._default_param)
super().__init__(*args, **kwargs) # Just use whatever is in TestCase's init + our stuff
self.thing = param
class TestClass(TestCaseSubClass):
_default_param = "bdfbdfb"
def test_stuff(self):
print('test stuff here')
x = TestClass()
print(x.thing) #"bdfbdfb"
y = TestClass(param="foo")
print(y.thing) #"foo"
这种方法没有
相当地
与问题中的参数格式匹配,从现在开始
param
仅为关键字参数,而不是命名位置参数。主要的实际差异是你不能提供一个论点。
帕拉姆
除非你提到它的名字:
z = TestClass("foo")
比如说,我不会这么做的。
基于对这个问题的编辑和注释,另一种可能的解释是:“如何通过任何必要的方法向传递给父类的子类提供一个参数?”,对于默认值没有任何要求。如果你愿意
帕拉姆
一
强制性的
参数,则只需在创建testClass实例时传入该值:
from unittest import TestCase
class TestCaseSubClass(TestCase):
def __init__(self, param, *args, **kwargs):
super().__init__(*args, **kwargs) # Just use whatever is in TestCase's init + our stuff
self.thing = param
class TestClass(TestCaseSubClass):
def test_stuff(self):
print('test stuff here')
x = TestClass("bdfbdfb")
print(x.thing) #"bdfbdfb"