类继承
我正在努力搞懂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 个回答
1
在Python中,类里的每个成员函数(方法)都应该有一个叫做self
的变量,这个变量的作用和C++、Java、C#中的this
指针/引用差不多。
简单来说,为了让你的代码正常工作,记得把self
作为所有方法的第一个参数。要给成员变量赋值或者读取它们时,使用self.a
和self.b
,否则你现在的写法只是创建了临时的函数变量。
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
看起来你的问题不仅仅是继承的问题,更是如何正确地在Python中定义类。
几点说明:
- 类的名字要用大写字母开头。这是一个约定俗成的规则。
- 正如ruibm提到的,每个(非静态)类的方法的第一个参数通常要命名为
self
。 - 你可以通过在
__init__
方法中设置self.variable = value
来创建实例变量。 - 如果你调用
Test()
,你会得到一个对象。如果不把它赋值给一个变量,那么像你在第二段代码中那样直接调用test2()
是没有效果的。也许在你的情况下是因为你以一种奇怪的方式定义了类。