0
在__init__
中,是否有一種很酷的使用類字段(類變量)作爲關鍵字參數的默認值的pythonic方法?
以下是示例:Python - 在__init__中使用類字段作爲關鍵字參數的值
class Foo():
field = 5
def __init__(self, arg=field): # arg=Foo.field => name 'Foo' is not defined
self.arg = arg
# ok, let's start
obj_1 = Foo()
print(obj_1.arg) # 5, cool
# then I want to change Foo.field
Foo.field = 10
print(Foo.field) # 10, obviously
obj_2 = Foo()
print(obj_2.arg) # still 5, that's sad :(
爲什麼會發生這種情況?
我知道我可以做水木清華這樣的:
class Qux():
field = 5
def __init__(self, arg='default'):
self.arg = {True:Qux.field, False:arg}[arg == 'default']
Qux.field= 10
obj_3 = Qux()
print(obj_3.arg) # 10
但有一個更簡單的方法?
在此先感謝。
等待,這不是無論這些問題的副本... –
這不是,但這些問題的信息是有幫助的。其實,[Fred Foo的回答](https://stackoverflow.com/a/5555470/8488611)解釋了一切 - 「默認參數是在函數定義時評估的,而不是在通話時評估的」。所以,關鍵字參數的默認值,包括在一個類內,總是指向同一個對象,在我的情況下 - 不可變5.如果我想改變一個默認值,我應該使用一個可變類型,比如'field = [5 ]' 'self.arg = arg [0]',然後'Foo.field [0] = 10'。它會正常工作,但它比我的Qux的例子更難看:) – KalyanKruno
您也可以使用類屬性或自定義的可變整數對象。 –