继承

面向对象三大特性:

  • 继承:防止我们定义重复的代码,重复的变量,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

results matching ""

    No results matching ""