python – 如何从超类方法中调用子类的方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何从超类方法中调用子类的方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2744字,纯文字阅读大概需要4分钟。
内容图文
![python – 如何从超类方法中调用子类的方法?](/upload/InfoBanner/zyjiaocheng/721/631b2db305e8469fb3e97f26f95d96ca.jpg)
假设我有这个课程:
class MyClass(object):
def uiFunc(self, MainWindow):
self.attr1 = "foo"
self.attr2 = "bar"
def test():
from subclassfile import MySubClass
MySubClass.firstFunc(self, 2, 2)
test()
而这个子类在其他文件中:
from classfile import MyClass
class MySubclass(MyClass):
def firstFunc(self, a, b):
c = a + b
d = self.secondFunc(self, c)
return d
def secondFunc(self, c):
d = c / 2
return d
这是一个愚蠢的例子,但正是我正在努力做的事情.
我想从第一个函数内的子类调用第二个函数.
但是,当我这样做时,它返回一个错误,表明MyClass没有这样的功能.
所以我想我在调用它时不应该在函数名前面使用self.但是当我不这样做时,它也会引发错误.
所以我的问题是:
如何在子类的第一个函数内访问第二个函数?
编辑:
谢谢大家的帮助.我会更好地解释我正在尝试做什么,而我猜我的实现在代码中真的很糟糕.
MyClass是代码的主要类,其中包含所有小部件和主要功能.
此类上还有一个按钮,该按钮与“测试”功能绑定.因此,当按下按钮时,整个过程应该起作用.
MySubClass文件是一个将数据导出到某个文件的辅助模块.
firstFunc是此模块中的主要功能,它处理所有数据,而secondFunc只是构建文件的模板.所以我在firstFunc中调用了这个secondFunc,以便加载模板,然后将数据写入文件中.
我使这个MySubClass继承自MyClass,以便它可以直接从MyClass访问数据库和其他变量.
所以我想我可以做到这一点.但我对这种实现并不十分熟悉.还有,抱歉我的英语不好.
解决方法:
您不从MyClass的实例调用此方法,您可以从MySubclass的实例中调用它.问题是你可能得到一个TypeError,因为你传递给firstFunc的参数(self)是错误的类型(MyClass而不是MySubClass).解决方案是重构您的代码,这样就不会发生.至少,我认为这是问题(当我尝试你的代码时,我得到了各种各样的导入错误).这是我尝试过的代码(我假设你说明了你所描述的问题):
class MyClass(object):
def uiFunc(self, MainWindow):
self.attr1 = "foo"
self.attr2 = "bar"
def test(self):
return MySubClass.firstFunc(self, 2, 2)
class MySubClass(MyClass):
def firstFunc(self, a, b):
c = a + b
d = self.secondFunc(c) #removed self from parameter list
return d
def secondFunc(self, c):
d = c / 2
return d
a=MyClass()
b=MySubClass()
print (b.test()) #this works because b is the right type to pass to first/second func
a.test() #This doesn't work because a is the wrong type.
请注意,将测试作为MyClass的方法并不是真的有意义,因为无论如何都不能从那里使用它.您也可以将测试移到MySubClass上.
另外,正如其他人所说,self.secondfunc(self,c)也很奇怪.这基本上等同于MySubClass.secondfunc(self,self,c),它具有错误的参数数量,因为你传递了两次自我.
这有效:
class MyClass(object):
def uiFunc(self, MainWindow):
self.attr1 = "foo"
self.attr2 = "bar"
def test(self):
return firstFunc(self, 2, 2)
def firstFunc(self, a, b):
c = a + b
d = secondFunc(self,c) #self from in front of function, now in parameter list
return d
def secondFunc(self, c):
d = c / 2
return d
class MySubClass(MyClass):
firstFunc=firstFunc
secondFunc=secondFunc
a=MyClass()
b=MySubClass()
print (b.test())
print (a.test())
但我强烈建议您重新构建代码.
内容总结
以上是互联网集市为您收集整理的python – 如何从超类方法中调用子类的方法?全部内容,希望文章能够帮你解决python – 如何从超类方法中调用子类的方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。