2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
傳入*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)]
這有點(diǎn)做作,但我認(rèn)為它說明了為什么您可能希望允許位置參數(shù)。
如果您確實(shí)想刪除*args并且不支持位置參數(shù),您也可以通過添加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
這不會(huì)將所有位置參數(shù)放入未命名的*. TypeError如果您嘗試提供位置論證,這將引發(fā) a 。

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
在第一種情況下,以下代碼將輸出True。
t = Thief(True, True)
print(t.human)
# True
但在第二個(gè)(沒有*args) - 它會(huì)引發(fā)異常:
t = Thief(True, True) # arguments without keywords
print(t.human)
# raises
# TypeError: __init__() takes 1 positional argument but 3 were given
添加回答
舉報(bào)