2 回答

TA貢獻1859條經(jīng)驗 獲得超6個贊
以下是如何使用關鍵字參數(shù)來做到這一點:
class MyClass:
def __init__(self, **q):
self.__dict__.update(q)
a = MyClass(a=10, b=20, c=50, d=69)
print(a.a)
print(a.b)
print(a.c)
print(a.d)
輸出:
10
20
50
69
用字典:
class MyClass:
def __init__(self, **q):
self.__dict__.update(q)
dct = {'q': 100, 'w': 200, 'e': 300, 'r': 400}
a = MyClass(**dct)
print(a.q, a.w, a.e, a.r)
輸出:
100 200 300 400

TA貢獻1836條經(jīng)驗 獲得超4個贊
與其操縱類實例__dict__,我建議使用該setattr方法。
class MyClass:
def __init__(self, new_vals):
for k, v in new_vals.items():
setattr(self, k, v)
dct = {'q': 100, 'w': 200, 'e': 300, 'r': 400}
a = MyClass(dct)
print(a.q, a.w, a.e, a.r)
恕我直言,內部結構有兩個前導下劃線是有原因的__dict__。我的一般建議是盡可能避免訪問任何帶有兩個前導下劃線的屬性/方法。另請參閱下文以獲取對考慮此主題的 Python 文檔的參考。
如果你想把它減少到一行,你也可以使用“虛擬”列表理解。下劃線捕獲None返回值,但不一定是必需的。
class MyClass:
def __init__(self, new_vals):
_ = [setattr(self, k, v) for k, v in new_vals.items()]
對有關操作內置__dict__屬性的 Python 文檔的簡短參考:
每個模塊的特殊屬性是__dict__. 這是包含模塊符號表的字典。__dict__修改這個字典實際上會改變模塊的符號表,但是不能直接給屬性賦值(你可以寫m.__dict__['a'] = 1,它定義m.a為1,但你不能寫m.__dict__ = {})。不建議直接修改。__dict__
請參閱有關內置類型的 Python 文檔
添加回答
舉報