Python: 从另一个 class 调用派生的 class 方法

Python: Call derived class method from another class

我已经搜索了所有相关的这个 Whosebug 问题,但它不满足我的问题。

BaseHandler.py

class BaseHandler(object):

    def __init__(self, rHandler, path, param):
            self._rHandler = rHandler
            self._server = self._rHandler.server
            self._path = path
            self._param = param

    def _getElement(self, name):
        return name + "append"

MyClass.py

class MyClass(BaseHandler.BaseHandler):

    def getA(self):
        print "Some info"

    def getB(self):
        el = self._getElement("T") #baseclass method
        print ebl

我想从下面调用 getB class。

RThread.py

import MyClass
class RThread(object):

    def someMethod(self):
        clr = MyClass.MyClass
        clr.getB()

我收到以下错误:

TypeError: unbound method getB() must be called with MyClass instance as first argument (got nothing instead)

当我尝试以下操作时:

clr = MyClass.MyClass()

我收到以下错误:

init() takes exactly 4 arguments (1 given)

请帮助我如何从不同的 class.

调用此方法

您没有正确调用该方法;你需要创建一个对象。这就是您创建对象的方式,这就是您正在做的事情,只是您没有传递足够的参数。

clr = MyClass.MyClass()

由于 MyClass 继承自 BaseHandler 而您没有重写其构造函数,因此您使用的是 BaseHandler 的构造函数,它有四个参数,其中一个是 self.

def __init__(self, rHandler, path, param):
    ...

所以,尝试这样的事情:

clr = MyClass.MyClass(arg1, arg2, arg3)
clr.getB()

您需要实例化 class 才能对其调用方法。

def someMethod(self):
    clr = MyClass.MyClass(*args)
    clr.getB()

如果您希望方法可以从 class 调用,您需要使用 @staticmethod@classmethod

@staticmethod
def getB():
    return self._getElement("T")

但是,您正在使用需要实例的 self. 表示法。因此,您还需要使用 @staticmethod 标记 _getElement 方法。静态方法无法访问父级 class。您可以使用 @classmethod 装饰器来做到这一点。

@classmethod
def getB(cls):
    return cls._getElement("T")