我已经找到了答案,所以我把它放在这里作为一个问题给自己 - 为了那些可能提出类似问题的人。
基本上,我希望能够删除对象方法。原因?
我有一个每个对象生命必须执行一次的动作。此操作无法放在 __ init __ 方法中,因为我需要在执行之前完全初始化系统。
我有一个适合该操作的占位符 - 父类中存在的方法。但我希望每次框架调用方法时都能避免检查条件。
所以我尝试了这种方法:
In [193]: class Parent(object):
def place_for_action(self):
print 'This is parent'
.....:
In [194]: class Child(Parent):
def place_for_action(self):
super(Child, self).place_for_action()
print 'This is child'
delattr(self, 'place_for_action')
.....:
当我尝试时,我失败了
In [186]: c= Child()
In [187]: c.place_for_action()
This is child
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/homes/markg/<ipython-input-187-da53ac96ffa9> in <module>()
----> 1 c.place_for_action()
/homes/markg/<ipython-input-185-7037db53bd87> in do_once(self)
2 def place_for_action(self):
3 print 'This is child'
----> 4 delattr(self, 'place_for_action')
5
AttributeError: 'Child' object attribute 'place_for_action' is read-only
答案 0 :(得分:4)
好的,答案是 - 类级别的删除方法 - 适合我的需要
In [195]: class Child(Parent):
def place_for_action(self):
super(Child, self).place_for_action()
print 'This is child'
delattr(self.__class__, 'place_for_action')
.....:
像魅力一样工作
In [196]: c = Child()
In [197]: c.place_for_action()
This is parent
This is child
In [198]: c.place_for_action()
This is parent