继承
面向对象三大特性:
- 继承:防止我们定义重复的代码,重复的变量,python是可以多继承的
- 封装
- 多态
c12.py
class Person():
sum = 0
def __init__(self,name,age):
self.name = name
self.age = age
def getName(self):
return self.name
def getAge(self):
return self.age
c13.py
from c12 import Person
class Student(Person):
pass
s1 = Student("张三",12)
print(Student.sum)
print(s1.sum)
print(s1.getName())
print(s1.getAge())
0
0
张三
12
改造一下c13.py
from c12 import Person
class Student(Person):
def __init__(self, school, name, age):
# 如何在子类中将name age传给父类的构造函数
Person.__init__(name,age)
self.school = school
pass
s1 = Student("北京大学","张三",12)
print(s1.getName())
print(s1.getAge())
运行一下,发现报错了
File "/Users/scottxiong/Desktop/end/python/class/c13.py", line 10, in <module>
s1 = Student("北京大学","张三",12)
File "/Users/scottxiong/Desktop/end/python/class/c13.py", line 6, in __init__
Person.__init__(name,age)
TypeError: __init__() missing 1 required positional argument: 'age'
明明传入了age,为什么还说缺少age的占位符呢?原因是必须传入self
from c12 import Person
class Student(Person):
def __init__(self, school, name, age):
# 如何在子类中将name age传给父类的构造函数
Person.__init__(self,name,age)
self.school = school
pass
s1 = Student("北京大学","张三",12)
print(s1.getName())
print(s1.getAge())
张三
12
想一想这里的self换成this,可以吗?
from c12 import Person
class Student(Person):
def __init__(self, school, name, age):
# 如何在子类中将name age传给父类的构造函数
Person.__init__(this,name,age)
self.school = school
pass
s1 = Student("北京大学","张三",12)
print(s1.getName())
print(s1.getAge())
可以看到必须传入self
Traceback (most recent call last):
File "/Users/scottxiong/Desktop/end/python/class/c13.py", line 10, in <module>
s1 = Student("北京大学","张三",12)
File "/Users/scottxiong/Desktop/end/python/class/c13.py", line 6, in __init__
Person.__init__(this,name,age)
NameError: name 'this' is not defined