2010-02-12 115 views
0

我想完全掌握Python中的类继承。我用类创建了程序,但它们都在一个文件中。我还创建了包含仅包含函数的多个文件的脚本。我已经开始在具有多个文件的脚本中使用类继承,并且遇到了问题。我有两个基本脚本,我试图让第二个脚本继承第一个脚本的值。该代码是如下的:类继承

首先脚本:

class test(): 

    def q(): 

     a = 20 
     return a 

    def w(): 
     b = 30 
     return b 

    if __name__ == '__main__': 
     a = q() 
     b = w() 

if __name__ == '__main__': 
    (a, b) = test() 

第二个脚本:

from class1 import test 

class test2(test): 

    def e(a, b): 
     print a 
     print b 


    e(a, b) 

if __name__ == '__main__': 
    test2(test) 

任何人都可以向我解释如何获得第二个文件,以继承第一档值?谢谢你的帮助。

+2

哪些教程你在阅读? – SilentGhost 2010-02-12 15:03:01

回答

13

我会说你搞砸了函数的东西类定义。它应该看起来更像是这样的:

class Test(object): 

    def __init__(self): 
     self.a = 20 
     self.b = 30 

if __name__ == '__main__': 
    test_instance = Test() 

from class1 import Test 

class Test2(Test): 

    def e(self): 
     print self.a 
     print self.b 


if __name__ == '__main__': 
    test_instance = Test2() 
    test_instance.e() # prints 20 and 30 

它看起来像你的问题不是(只)继承,但也如何正确define classes in Python

一些注意事项:

  • 始终使用类大写的名称。这或多或少是约定。
  • 正如ruibm所指出的,类的每个(非静态)方法都必须有一个名为(按照惯例)的第一个参数self
  • 您可以通过在__init__方法中将它们设置为self.variable = value来创建实例变量。
  • 如果您拨打Test(),您会收到一个对象。除非你将它分配给一个变量,只要调用test2()就像你在第二段代码中做的那样没有效果。也许它有你的情况,因为以一种奇怪的方式定义你的课程。
+0

比我的回答好得多。我不应该懒惰到不写代码的地步!做得好。 :) – rui 2010-02-12 15:07:53

1

在Python中,类的每一个成员函数(方法)应该有一个称为self变量,它是相当多的在C++,Java和C#的this指针/参考。

基本上,要使您的代码正常工作,请将self作为所有方法的第一个参数。要分配/读取成员变量,请使用self.aself.b,否则您只是按照现在的方式创建临时函数变量。