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