我已经搜索了所有与此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个参数)
请帮助我如何从不同的类调用此方法。
答案 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