簡體   English   中英

Python類動態屬性訪問

[英]Python Class dynamic attribute access

我想通過帶有名稱的字符串訪問類屬性。

就像是:

class a:
    b=[]

c='b'
eval('a.'+c+'=1')

但這在Python中不起作用。 我怎樣才能做到這一點?

使用setattr

In [1]: class a:
   ...:     b = []
   ...:     

In [2]: setattr(a, 'b', 1)

In [3]: a.b
Out[3]: 1

反向使用getattr

In [4]: getattr(a, 'b')
Out[4]: 1

In [5]: getattr(a, 'x', 'default')
Out[5]: 'default'

但是,我非常懷疑,有更好的方法可以實現您的目標。 您是否嘗試過使用字典而不是課堂?

eval用於評估,請使用exec '執行'語句:

exec('a.'+c+'=1')

但是,請考慮同時使用兩者的風險。 您可以查看此答案以了解表達式和語句之間的區別。

由於您setattr名稱設置屬性,因此在Hop的答案中解釋的setattr是更好的做法,並且比使用exec更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM