2017-02-02 86 views
-1

我有一堆class对象,它们都从基类继承。其中一些覆盖了一种方法(save)并做了些什么。对于这种特殊用例,我想暂时不允许使用子方法save(如果存在),而是强制使用父方法save从外部调用父方法

class BaseClass(object): 
    def save(self, *args, **kwargs): 
     print("Base Called") 

class Foo(BaseClass): 
    def save(self, *args, **kwargs): 
     # do_stuff 
     print("Foo called") 
     return super(Foo, self).save(*args, **kwargs) 

obj = Foo() 

我怎么能说obj父保存从孩子,使得它打印“称为基”之外?

+0

你是什么意思?你的意思是* only * print“Base Called”? –

+0

基本上完全忽略子保存方法,只执行父方法 – rh0dium

+0

您总是可以执行'BaseClass.save(obj)'。或者如果你希望它更普遍,可以使用'super'。虽然,这**尖叫**“我不应该使用继承” –

回答

3

您可以致电与super()

super(type(obj), obj).save() 

从对象的父方法当我运行此:

class BaseClass(object): 
    def save(self, *args, **kwargs): 
     print("Base Called") 

class Foo(BaseClass): 
    def save(self, *args, **kwargs): 
     # do_stuff 
     print("Foo called") 
     return super(Foo, self).save(*args, **kwargs) 

obj = Foo() 
super(type(obj), obj).save() 

输出:

Base Called 
+0

的父保存即使已初始化,愚蠢的问题是否也能正常工作? – rh0dium

+0

我这么认为,用我跑去测试的代码编辑答案。 –

+0

非常感谢! – rh0dium