python 3 如何在类方法属性存在之前通过引用它来创建它



我正在尝试解决一个代码战争问题,我不确定在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实现为一个对象,其__getattr__设置其父级的适当属性。

相关内容

  • 没有找到相关文章

最新更新