关于oop:用Python中的实例函数重写类函数

Overriding class function with instance function in python

考虑这个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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案例的实例是在需要的是一位太多,和有一个foooverridden例如函数是类的行为。

谢谢你的堆垛机。


好吧。。。我尽了最大的努力去怀孕,想知道该问什么,但我失败了。现在我知道了,这就是我想要做的:创建一个同时是实例和类方法的方法。还有我需要的解决方案。

但它看起来还是不太漂亮。也许有更干净的方法或更干净的黑客。


仔细看一下Doc中的ClassMethod。实例方法将实例作为第一个参数传递,而类方法将类作为第一个参数传递。调用slaveType.foo()通过一个实例slaveType作为foo()的第一个参数。foo()希望类作为第一个参数。