【发布时间】:2013-10-27 09:23:24
【问题描述】:
如何在其自己的“类初始值设定项”(类定义)代码中访问类的 __dict__?如果做不到这一点,我如何才能将类的待定义属性作为字符串访问(以便可以通过编程方式生成它们的名称并设置它们的值)
class A: # from a library by a stubborn maintainer
def __init__ (self):
self.hello = "Hello"
# + some huge misguided crap that I do not control
def f1 (self):
self.f2 ()
def f2 (self):
print self.hello
class B:
f1 = A.__dict__ ['f1'] # works
# how to loop over 2..10 and set B.f$i <- A.f$i ?
# this doesn't work:
#B.__dict__ ['f2'] = A.__dict__ ['f2'] # B not yet defined
def __init__ (self):
#self.hello = A ().hello # the actual code has to be copied manually
# misguided crap removed
a = B ()
a.f2()
最好不要复制/粘贴 self.hello 初始化以绕过被误导的东西,但我认为没有重构工具可以轻松解决。
【问题讨论】:
-
子类 A 怎么样?
-
然后运行 A 的初始化程序?有没有办法避免它?尽管如此,我还是想挑选方法。如果有错误,我可以决定是否添加更多方法
-
你可以在你的子类中重写你不喜欢的方法,并且永远不要调用
super。也许我对这个问题理解得不够好。 -
A 有数百种方法。它是许多概念的合并。我想挑选,看看它是什么(以及是否)有效。我会在需要的地方使用剪切/粘贴/修改。但是关于不调用 super 的好处(不过,我仍然需要一些来自 super 的代码,必须复制/粘贴)
-
哦,我明白了。这听起来像是元类魔法的一个很好的用例……一秒钟。
标签: python class inheritance reflection initialization