类的继承.py中代码如下:
# 类的继承
# 1.继承时构造函数__init__()
# 1.1继承中无__init__(),调用基类的__init__()
# 1.2继承中有__init__(),调用派生类的__init__(),不调用基类的__init__()
# 1.3继承中有__init__(),但需要调用基类的__init__(),必须显示调用基类的__init__()
# 1.3.1 经典类的写法: 父类名称.__init__(self,参数1,参数2,...)
# 1.3.2. 新式类的写法:super(子类,self).__init__(参数1,参数2,....)
# 总结如下:
# 情况一:子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。
# 情况二:子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。
# 情况三:子类重写__init__()方法又需要调用父类的方法:使用super关键词:
class MyPerson(object):
def __init__(self, name, age, nation):
self.name = name
self.age = age
self.nation = nation
def getname(self):
return self.name
def getage(self):
return self.age
def getnation(self):
return self.nation
def dowork(self):
print("Name:%s, Age:%s, Nation:%s, i am working" % (self.name, self.age, self.nation))
class Student(MyPerson):
def __init__(self, name, age, nation, grade):
MyPerson.__init__(self, name, age, nation)
self.grade = grade
def dowork(self):
print("Name:%s, Age:%s, Nation:%s, Grade:%s , i am studying" % (self.name, self.age, self.nation, self.grade))
class Teacher(MyPerson):
def __init__(self, name, age, nation, salary):
super(Teacher, self).__init__(name, age, nation)
self.salary = salary
def dowork(self):
print("Name:%s, Age:%s, Nation:%s, Salary:%s , i am Teching" % (self.name, self.age, self.nation, self.salary))
另一个.py中调用:
from 类的继承 import *
p1 = MyPerson("aaa",12,"Chinese")
print(p1.getname(), p1.getage(), p1.getnation())
p1.dowork()
print("*" * 30)
p2 = Student("bbb", 23, "Chinese", 1)
print(p2.getname(), p2.getage(), p2.getnation())
p2.dowork()
print("*" * 30)
p3 = Teacher("ccc", 7, "Chinese", 2000000)
print(p3.getname(), p3.getage(), p3.getnation())
p3.dowork()
输出的结果:
aaa 12 Chinese
Name:aaa, Age:12, Nation:Chinese, i am working
******************************
bbb 23 Chinese
Name:bbb, Age:23, Nation:Chinese, Grade:1 , i am studying
******************************
ccc 7 Chinese
Name:ccc, Age:7, Nation:Chinese, Salary:2000000 , i am Teching
以上可以好好理解一下类的继承的相关概念,__init__()的调用,方法的重写等。