【有书共读05】《Python编程》读书笔记09
类的继承
继承是面向对象语言的一个特点,而python作为一个解释型语言,也有这样的功能(感觉好棒啊!)
继承的主要目的是为了代码复用
一、子类的init()方法
#coding:utf-8 class Person(object): def __init__(self, name, age): self.name = name self.age = age self.weight = 'weight' def talk(self): print("person is talking....") class Chinese(Person): def __init__(self, name, age, language): super().__init__(name, age) self.language = language print(self.name, self.age, self.weight, self.language) c = Chinese('bigberg', 22, 'Chinese') c.talk()
运行结果如下:
bigberg 22 weight Chinese person is talking....
创建子类时,父类必须包含在当前文件夹中,且位于子类前面。
在子类Chinese中,出现了一个新的东西super()。super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码是让Python调用Chinese的父类Person()的init()方法,让Chinese实例包含父类的所有属性。父类也被称为超类(superclass),方法名称super()由此而得名。
神奇的是,函数super()可以被代替,书上没写,我自己看别人的代码学来的哈哈哈哈哈哈哈
#将super().__init__(name, age)替换为 Person._init_(self,name,age) #运行结果一毛一样
因此,我觉得Super()的作用就是隐士调用父类的方法,如果不嫌麻烦的话,可以直接用父类名来写……
调用父类的方法,不仅仅可以是init(),其他的方法都可以
二、重写父类方法
方法重写还是蛮简单的,和C++一样,只要子类方法和父类方法重名,python自动隐藏父类方法,就达到了重写父类方法的目的
看个例子
```pythoncoding:utf-8
class Person(object):
def __init__(self, name, age): self.name = name self.age = age self.weight = 'weight' def talk(self): print("person is talking....")
class Chinese(Person):
def __init__(self, name, age, language): Person.__init__( self,name, age) self.language = language print(self.name, self.age, self.weight, self.language) def talk(self): # 子类 重构方法 print('%s is speaking chinese' % self.name) def walk(self): print('is walking...')
c = Chinese('bigberg', 22, 'Chinese')
c.talk()
运行结果
bigberg 22 weight Chinese
bigberg is speaking chinese
方法walk()是子类自己拥有的,我就不特别说明了 方法talk()在父类和子类中,但是运行结果显示的是调用子类talk()方法。 ##三、导入类 先前说了一下,父类必须包含在当前文件夹中,且位于子类前面。 但是!!!很多时候我们并希望我们的文件超级长(加入我在一个文件里写了一个父类,它有100个子类,是不是要把人逼疯!) 所以,这个情况python的编写者也想到了! ```python from example import Person
这个语句的意思是从example模块中(其实就是一个py文件,名字叫example)导入类Person,
当然我们可以从同一个模块中引入多个类
from example import Person , Chinese
也可以导入模块中的所有类
from example import *
可以导入整个模块
import example
这里有个重点
在一个包含类和程序主体的py文件中,经常会有这么一个语句:
if _name_ == "_main_":
当这个文件作为模块被引用的时候,那么下面的语句就不会执行
而如果直接执行这个文件,就会执行if name == "main":下面的代码
如果还不是很懂,可以百度一下啦~~