2 回答
TA贡献1780条经验 获得超5个赞
传入*args意味着可以初始化你的Thieflike
>> x = Thief(True, False)
>> x.human
False
>> x.sneaky
True
这读起来很混乱,并且很难通过多重继承来跟踪,但它可能很有用。保持这种能力意味着你可以做
sneaky = (True, False, True,)
human = (True, False, False,)
thieves = [Thief(*args) for args in zip(sneaky, human)]
这有点做作,但我认为它说明了为什么您可能希望允许位置参数。
如果您确实想删除*args并且不支持位置参数,您也可以通过添加after来将它们从Sneakyand中排除。Person*,self,
class Sneaky:
def __init__(self, *, sneaky=False, **kwargs):
super().__init__(**kwargs)
self.sneaky = sneaky
class Person:
def __init__(self, *, human=False, **kwargs):
super().__init__(**kwargs)
self.human = human
这不会将所有位置参数放入未命名的*. TypeError如果您尝试提供位置论证,这将引发 a 。
TA贡献1995条经验 获得超2个赞
在第一种情况下,以下代码将输出True。
t = Thief(True, True)
print(t.human)
# True
但在第二个(没有*args) - 它会引发异常:
t = Thief(True, True) # arguments without keywords
print(t.human)
# raises
# TypeError: __init__() takes 1 positional argument but 3 were given
添加回答
举报