所以我想遍歷一個字典,對于字典中的每個鍵,我想創建一個類變數,但是類變數的名稱不會根據回圈而改變
例如:
fruits= {'pears': 3, 'strawberries': 5, 'apples': 2, 'watermelons': 1, 'oranges':4}
class Fruit():
def __init__(self, fruits):
for fruitname in fruits:
self.fruitname = fruits[fruitname]
#How do I change fruitname when it is "connected" to the self
我嘗試在 stackoverflow 上尋找其他一些問題,但無法真正找到問題,因為我不知道應該如何稱呼它。
uj5u.com熱心網友回復:
這就是 setattr () 的用武之地: https ://www.w3schools.com/python/ref_func_setattr.asp
setattr( self, 'foo', 'bar')請注意,和之間存在差異setattr( Fruit, 'foo', 'bar')
另請注意,python argparse 命名空間已經這樣做了一段時間,通常人們更喜歡字典而不是屬性
uj5u.com熱心網友回復:
如果要將所有字典值添加為實體屬性,則可以使用setattr帶有名稱和值的呼叫,或者只需更新__dict__.
例如。見下文
fruits = {'pears': 3, 'strawberries': 5, 'apples': 2, 'watermelons': 1, 'oranges': 4}
class Fruit():
def __init__(self, fruits):
self.__dict__.update(fruits)
if __name__ == '__main__':
fruit = Fruit(fruits)
print(fruit.pears)
print(fruit.strawberries)
print(fruit.apples)
列印出來
3
5
2
uj5u.com熱心網友回復:
采用setattr
fruits= {'pears': 3, 'strawberries': 5, 'apples': 2, 'watermellons': 1, 'oranges':4}
class Fruit():
def __init__(self, fruits):
for fruit_name, fruit in fruits.items():
setattr(self, fruit_name, fruit)
fruit_instance = Fruit(fruits)
setattr并可getattr用于分別獲取或設定物件的屬性。hasattr也可以用來請求存在。
uj5u.com熱心網友回復:
沒有for回圈:你可以在運行時直接創建這樣的類type:你需要將類名作為字串傳遞,父母的元組,帶有方法的字典,類屬性,......
fruits= {'pears': 3, 'strawberries': 5, 'apples': 2, 'watermelons': 1, 'oranges':4}
f = type('Fruit', (object,), fruits)
# tests:
print(f)
print(hasattr(f, 'pears'))
print(f.pears)
輸出
<class '__main__.Fruit'>
True
3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/449978.html
