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

时间:2019-07-11 17:53:13

标签: python class derived

我已经搜索了所有与此stackoverflow问题相关的问题,但它不满足我的问题。

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。

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 ()恰好接受4个参数(给定1个参数)

请帮助我如何从不同的类调用此方法。

2 个答案:

答案 0 :(得分:0)

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

clr = MyClass.MyClass()

由于MyClass继承自BaseHandler,并且您没有覆盖其构造函数,因此您使用的是BaseHandler中的构造函数,它有四个参数,其中一个是{{1} }。

self

所以,尝试这样的事情:

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

答案 1 :(得分:0)

您需要实例化该类才能在其上调用方法。

@objc func handleImageRotation(sender: 
UIRotationGestureRecognizer){
    guard sender.view != nil else{return}

    if sender.state == .began || sender.state == .changed {
        // rotation enacted
        imageView.transform = imageView.transform.rotated(by: sender.rotation)
        rotationAngleRads = sender.rotation
        rotationAngleDegs = rad2Deg(radians: rotationAngleRads)
        print("Degrees: \(rotationAngleDegs!)")

        sender.rotation = 0
     }
}


 // Convert Radians to Degress
private func rad2Deg(radians: CGFloat) -> Double{

    let angle = Double(radians) * (180 / .pi)
    return Double(angle)
}

如果您希望该方法可从类中调用,则需要使用def someMethod(self): clr = MyClass.MyClass(*args) clr.getB() @staticmethod

@classmethod

但是,您使用的@staticmethod def getB(): return self._getElement("T") 表示法需要一个实例。因此,您还需要用self.标记_getElement方法。静态方法无权访问父类。您可以使用@staticmethod装饰器来实现。

@classmethod