6

在过去的几天里,我开始学习 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)

我不知道是怎么回事。我一直在从 thenewboston 的教程中学习 python,但是那些已经过时了(我认为他的教程代码使用了 python 2.7 版)。他还在 IDLE 中编码,这意味着他的类都包含在一个文件中。然而,我的都编码在自己的文件中。这意味着我不知道我得到的代码错误是由于过时的语法还是我对这种语言缺乏知识的结果。但我离题了。如果有人可以回复解决方案和/或解释代码出错的原因以及我可以做些什么来解决它。最好有解释。我宁愿知道我做错了什么,这样我就可以避免和解决类似情况下的问题,而不仅仅是复制和粘贴一些代码并查看它是否有效。谢谢,期待你的回答

4

2 回答 2

3

我运行了您的代码,尽管进行了一些修改并且运行良好。这是我的代码:

蟒蛇超级:

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()似乎已经解决了这个问题。

于 2012-07-21T21:21:04.123 回答
0

pythonSuper指的是模块,而不是类。

class pythonSub(pythonSuper.pythonSuper): 
    pass
于 2012-07-21T21:07:28.600 回答