【有书共读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自动隐藏父类方法,就达到了重写父类方法的目的
看个例子
```python

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): 
    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":下面的代码
如果还不是很懂,可以百度一下啦~~

#Python#
全部评论
顶帖,巩固下基础
点赞 回复 分享
发布于 2018-06-24 09:18

相关推荐

牛客263158796号:我领羊一面后十天不挂也不推进 今天问hr说等前序的第一批意向发完看情况再看是否推进
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务