在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