簡體   English   中英

python 3如何在存在之前通過引用創建類方法屬性?

[英]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根本無法實現,那將是一件好事。

https://www.codewars.com/kata/5571d9fc11526780a000011a

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.

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