在Python 3.4中我有一个通过构图的成员对象。如何覆盖成员对象的方法?
我想覆盖它的一个成员函数。
def class Foo:
def __init__(self, value):
self.value = value
def member_obj.baz(baz_self, arg):
print("my new actions on {}".format(arg))
Foo.member_obj.baz(arg) #the original function
foo_inst = Foo(2)
bar = Bar(*bar_parameters) #from a third party module
setattr(foo_inst, "member_obj", bar) #it did not "stick" when I did foo_inst.member_obj = bar
foo_inst.member_obj.baz("some argument")
继承Bar
类没有任何意义。 我也只想要这种不同的行为发生,如果对象在Foo
内。我在其他许多地方使用Bar
,并希望保留调用该方法的相同方式。即我想避免将其包装在Foo.baz
中。
是否有可能做类似def member_obj.baz
的东西,这是一个好主意吗?
'def member_obj.baz'肯定无效。你必须继承'Bar'并将其用于'foo_inst.member_obj'。 – chepner
我把它放在那里来说明我正在努力实现的目标。问题中的“Bar”是'sqlalchemy.Session'。我想避免它的子类化,因为它来自'sessionmaker'函数,所以我将不得不改变它,也可能有其他关系,我不知道这也可能会破坏。我想在'session.expunge'之前添加一些例程来处理我正在执行的混音,所以我无法控制它被调用的时间。如果可能的话,我认为我最好的选择是在mixin中覆盖它。 – mvbentes