繁体   English   中英

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

[英]Overriding class function with instance function in python

考虑以下示例:

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类函数无法被实例行为覆盖。

谢谢堆高车!

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

Okey ...我竭尽全力去看Google,想知道该问些什么,但是我失败了。 现在我知道,这就是我想要做的: 创建同时是实例和类方法的方法 还有我需要的解决方案。

但是它看起来仍然不是很漂亮。 也许有更干净的方法或更干净的hack。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM