用python中的实例函数覆盖类函数

时间:2011-09-09 13:13:51

标签: python oop instance class-method

考虑这个例子:

class master:
    @classmethod 
    def foo(cls):
        cls.bar()

class slaveClass( master ):
    @classmethod 
    def bar(cls):
        print("This is class method")

slaveType = slaveClass
slaveType.foo()

class slaveInstance( master ):
    #def foo(self):
    #    self.foo()
    def __init__(self,data):
        self.data=data
        print("Instance has been made")
    def bar(self):
        print("This is "+self.data+" method")


slaveType = slaveInstance("instance")
slaveType.foo()

我知道当foo的最后一个定义被取消注释时它有效,但是有没有其他方法可以在不改变用法的情况下使用这个foo函数。我有一个大型项目,其中类定义了工作方式,我能够改变slaveType的方式但是恰好有一个需要实例的情况,并且有太多foo个函数被覆盖的例如行为。

谢谢堆叠器!

2 个答案:

答案 0 :(得分:0)

仔细查看classmethod的文档。实例方法将实例作为第一个参数传递,类方法将类作为第一个参数传递。调用slaveType.foo()会将实例slaveType作为foo()的第一个参数传递。 foo()期待一个类作为第一个参数。

答案 1 :(得分:0)

Okey ......我尽力预先谷歌并弄清楚要问什么,但我失败了。现在我知道,这就是我想要做的事:Creating a method that is simultaneously an instance and class method。还有我需要的解决方案。

但它似乎仍然不是很漂亮。也许有更清洁的方式或更干净的黑客。