我在过去几天开始学习python,在探索面向对象编程时,我遇到了问题。 我在运行pydev插件时使用Eclipse,运行在python 3.3 beta上,并使用的是Windows 64位系统。
我可以初始化一个类并使用其中的任何方法,只要我不尝试扩展超类(我在不同的源文件中编码的每个类) 例如,以下代码编译并运行正常。
class pythonSuper:
string1 = "hello"
def printS():
print pythonSuper.string1
以及访问和运行它的代码......
from stackoverflow.questions import pythonSuper
class pythonSub:
pysuper = pythonSuper.pythonSuper()
pysuper.printS()
像我说的那样,这很有效。以下代码不是
class pythonSuper: """Same superclass as above. unmodified, except for the spacing"""
string1 = "hello"
def printS(self):
print(pythonSuper.string1)
嗯,那不是真的。至少据我所知,超类绝对没问题。它是奇怪的子类
from stackoverflow.questions import pythonSuper
class pythonSub(pythonSuper):
pass
pythonObject = pythonSub()
pythonSub.pythonSuper.printS()
运行子类时,Eclipse会打印出此错误
Traceback (most recent call last):
File "C:\Users\Anish\workspace\Python 3.3\stackoverflow\questions\pythonSub.py",
line 7, in <module>
class pythonSub(pythonSuper):
TypeError: module.__init__() takes at most 2 arguments (3 given)
我不知道发生了什么。我一直在从newboston的教程中学习python,但是那些已经过时了(我认为他的教程代码使用的是python版本2.7)。他还在IDLE中编码,这意味着他的类都包含在一个文件中。然而,我的所有文件都是用自己的文件编码的。这意味着我不知道我得到的代码错误是由于过时的语法还是我对这种语言缺乏了解。但我离题了。如果有人可以回复一个解决方案和/或解释代码出错的原因以及我可以做些什么来解决它。解释将是优选的。我宁愿知道我做错了什么,所以我可以在类似的情况下避免和修复问题,而不仅仅是复制并粘贴一些代码,看看它是否有效。 谢谢,我期待你的回答
答案 0 :(得分:3)
我运行了你的代码,虽然经过了一些修改,它运行得很完美。这是我的代码:
pythonSuper:
class pythonSuper:
string1 = 'hello'
def printS(self):
print(self.string1)
主:
from pythonSuper import pythonSuper as pySuper
class pythonSub(pySuper):
pass
pythonObject = pythonSub()
pythonObject.printS()
注意:我对您的代码所做的更改如下:
在您的代码中,您编写了pythonSub.pythonSuper.printS()
这是不正确的,因为通过pythonSub
您已经支持直接从超类继承的printS()
方法。因此,不需要在该语句中显式引用超类。我用来代替上述问题的陈述pythonObject.printS()
似乎已经解决了这个问题。
答案 1 :(得分:0)
pythonSuper
指的是模块,而不是类。
class pythonSub(pythonSuper.pythonSuper):
pass