0

我正在尝试解决一个我不确定在 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

4

1 回答 1

1

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__设置其父对象的适当属性。

于 2018-03-29T05:37:02.177 回答