2012-07-21 33 views
6

我在过去几天开始学习python,并在探索面向对象的编程时遇到了问题。 我在运行pydev插件时使用Eclipse,在python 3.3 beta上运行,并使用Windows 64位系统。如何在Python中正确地扩展其他类? (python v3.3)

我可以初始化一个类,并使用其中的任何方法,只要我没有试图扩展超类(每个类我在不同的源文件中编码) 例如,下面的代码编译并运行良好。

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) 

嗯,这并不完全正确。至少就我所知,超类是绝对好的。它是weirds出

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) 

我不知道发生了什么事情

的子类。我一直在从新波士顿的教程学习python,但那些已经过时(我认为他的教程代码使用python版本2.7)。他还使用IDLE编码,这意味着他的类都包含在一个文件中。但是,我的所有文件都以自己的文件编码。这意味着我不知道我得到的代码错误是由于过时的语法还是我对此语言缺乏了解。但我离题了。如果任何人可以回复一个解决方案和/或解释为什么代码出错,我可以做些什么来解决它。解释将是优选的。我宁愿知道我做错了什么,所以我可以在类似的情况下避免和解决问题,而不仅仅是复制和粘贴一些代码并查看它的工作原理。 谢谢,我期待你的回答

回答

0

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

class pythonSub(pythonSuper.pythonSuper): 
    pass 
+0

谢谢,但现在它发布了这个错误Traceback(最近调用最后): 文件“C:\ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub。pythonSub'没有属性'pythonSuper',我不想纠缠任何人,但是有什么理由? – pipsqueaker117 2012-07-21 21:09:22

+3

为什么你会期望它对?pythonSub是扩展pythonSuper,不包含它。'printS'是继承的,你可以通过你的pythonSub实例直接访问它。 – 2012-07-21 21:16:55

+0

@DanielRoseman对不起,那个飞过了我的脑袋,你能解释一下吗? ,嗯,noob语言?(或者你可以链接到我可以学习所有这些东西的页面) – pipsqueaker117 2012-07-21 23:15:09

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()方法d,直接从超类继承。所以没有必要在该语句中明确引用超类。我用来代替上述提到的pythonObject.printS()的声明似乎解决了这个问题。

+0

这给了我错误Traceback(最近调用最后一次): 文件“C:\ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub.py“,第8行,在 class pytho nSub(pySuper): TypeError:module .__ init __()至多需要2个参数(给出3个参数)我尝试复制并粘贴代码(使用我自己的包名称),但结果是上述错误。我开始认为这是一个Python 3.3语法的东西,因为两个解决方案已经失败(从某种意义上说,程序没有正确运行),但我可能完全脱离了标记 – pipsqueaker117 2012-07-21 23:06:48

+0

请发布代码,并为我的错误更能够帮助你。我相信这是你在你的代码版本上犯的一个错误,我在Python 3.3中写了上面的代码,它效果很好! – NlightNFotis 2012-07-22 12:33:22