Python如何向子类添加_uinit__; param
我有一个子类共享它的基类的_u__; init __;:Python如何向子类添加_uinit__; param,python,oop,Python,Oop,我有一个子类共享它的基类的_u__; init __;: class SubClass(BaseClass) def __init__(self, param, *args, **kwargs): super().__init__(*args, **kwargs) self.thing = param 我一直遇到的问题是子类uuu init_uuu参数“param”作为一个额外参数被传递到super()。这通常会给我一个错误,如: TypeError:
class SubClass(BaseClass)
def __init__(self, param, *args, **kwargs):
super().__init__(*args, **kwargs)
self.thing = param
我一直遇到的问题是子类uuu init_uuu参数“param”作为一个额外参数被传递到super()。这通常会给我一个错误,如:
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
我不想那样。我只希望“param”用于这些子类实例。如何停止将额外的参数发送到基类_uu_u_u_u_u,同时仍能在子类_uu_uu_u_u中使用它?重现问题的示例代码:
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
print(self.thing)
class TestClass(TestCaseSubClass(param='bdfbdfb')):
def test_stuff(self):
print('test stuff here')
或者只使用原始python,没有导入,为什么我不能这样做?(同样的错误)
我将这个问题解释为“如何在不为子类定义\uuu init\uuu
的情况下为其提供默认参数?”。一种可能的方法是将默认值定义为类属性,您可以在父类“”中访问该属性:
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
是一个只包含关键字的参数,而不是一个命名的位置参数。主要的实际区别是,除非通过名称引用它,否则不能为param
提供参数:z=TestClass(“foo”)
不会这样做
根据对该问题的编辑和评论,另一种可能的解释可能是“如何通过任何必要的方式向传递给父类的子类提供参数?”,它对默认值没有任何要求。如果您愿意将param
设为强制参数,则在创建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"
我认为代码不应该给出那个错误。您编写它的方式(尽管存在语法错误)不应将param
传递给父级的\uuuu init\uuuu
。请提供一个例子。可能是因为我正在子类化什么?在本例中为unittest.TestCase。下面是一个工作示例:这就是您应该如何使用TestCase:我正在做的唯一一件事就是用我自己的子类扩展TestCase,您希望类实例AB(param='thh')
在类定义中做什么?OHHHHH就是这样!当我定义ABC子类时,我认为您必须指定所需的AB参数。我想你不必这么做。在实例化ABC类时发送AB参数。回答就是这样。
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"