[英]python 3 How can a class-method attribute be created by referencing it before it exists?
我正在嘗試解決一個代碼wars問題,我不確定在python中是否有簡單的實現。 我想通過在存在之前簡單地引用它來動態創建類方法屬性。 聽起來很直觀。 當該屬性尚不存在並且沒有從外部為其設置值時,如何在該方法內部初始化該屬性?
class Thing:
def __init__(self, name):
self.name = name
@property
def is_a(self):
setattr(self.is_a,"is_a_{}".format(???),True)
john = Thing("John")
john.is_a.man
print(john.is_a_man) # this is directly from the cw test
如果不先設置它(即john.is_a.man = True
),我看不到這是怎么可能的。 並不是說使用try / except是一個好的策略,但是我什至無法弄清楚如何捕獲對不存在的屬性的引用,因此可以在處理程序中創建它。 任何對此的指導將不勝感激。 或者,如果使用Python根本無法實現,那將是一件好事。
CodeWars想要的東西是可行的,但這太神奇了,它帶來的好處太少,而且界面混亂,尤其是后面的部分。
class IsA(object):
def __init__(self, parent):
self.parent = parent
def __getattr__(self, name):
setattr(self.parent, 'is_a_'+name, True)
class Thing(object):
def __init__(self, name):
self.name = name
self.is_a = IsA(self)
thing.is_a
訪問不需要執行任何特殊操作; 不管是什么, thing.is_a.whatever
訪問都是神奇的thing.is_a
,因此thing.is_a
需要評估一個帶有用於在thing
上設置屬性的鈎子的對象。 我們將Thing的is_a
作為對象實現,該對象的__getattr__
設置其父對象的適當屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.