1

考虑这个例子:

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类似的函数需要覆盖实例行为。

谢谢堆垛机!

4

1 回答 1

0

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

于 2011-09-09T13:40:56.277 回答