1、继承:字面意思

# 继承 : 字面意思

class father:
pass class grandfather:
pass class children(father): # 单继承
pass class children1(father, grandfather): # 多继承
pass

例子

class Dad:
money = 10 def __init__(self, name):
print('巴巴')
self.name = name def hit_son(self):
print('%s 正在打儿子' % self.name) class Son(Dad): # 继承
pass print(Son.money) #
s1=Son('爸爸') # 巴巴
Son.hit_son(s1) # 爸爸 正在打儿子
print(s1.money) #

那么什么时候用继承什么时候用组合那?
1、当类之间又显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
2、当类之间有很多的功能,提供这些共同的功能能做成基类,用继承比较好

# 伪代码
class Animal: #父类
def eat(self):
print('吃') def drink(self):
print('喝') def shit(self):
print('拉') def pee(self):
print('撒') class Cat(Animal): # 子类
def __init__(self, name): # 派生
self.name = name def cry(self): # 派生
print('喵喵叫') class Dog(Animal): # 子类
def __init__(self, age): # 派生
self.age = age def look_door(self): #派生
print('看门')

2、接口继承

import abc

# 接口继承:父类如果是通过abc模块实现的接口,那么继承它的子类必须实现父类中的方法,不然无法实例化对象
# 接口继承主要负责规范子类
class All_file(metaclass=abc.ABCMeta):
@abc.abstractmethod
def read(self):
pass @abc.abstractmethod
def write(self):
pass class Disk(All_file):
def read(self):
print('disk read') def write(self):
print('disk write') class CDrom(All_file):
def read(self):
print('CDrom read') def write(self):
print('CDrom write') class Mem(All_file):
def read(self):
print('Mem read')
def write(self):
print('Mem write') # m1=Mem()
# m1.read() # Mem read
# m1.write() # 此处调用为父类 write方法 m1=Mem() #此时 会报错 因为 Mem中没有write 方法
m1.read() # Mem read
m1.write() # Mem write

3、子类调用父类的方法 就是用父类.父类方法名字() 或者 用 super

方法1 ——父类.父类方法名字()

class Vehicle:
Country='China'
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power def run(self):
print('开动啦') class Subway(Vehicle):
def __init__(self,name,speed,load,power,line):
# self.name = name
# self.speed = speed
# self.load = load
# self.power = power
Vehicle.__init__(self,name,speed,load,power) # 子类调用父类的init方法 self.line=line
def show_info(self):
print(self.name,self.line,self.speed,self.load,self.power) def run(self):
Vehicle.run(self) # 开动啦 这里也是 子类调用了父类的方法
print('%s %s线 开动了' %(self.name,self.line))
line13=Subway('北京地铁','10km/s',1000000,'电',13) line13.show_info() # 北京地铁 13 10km/s 1000000 电 line13.run() # 北京地铁 13线 开动了

方法2——super

# 方法2 super
class Vehicle:
Country = 'China' def __init__(self, name, speed, load, power):
self.name = name
self.speed = speed
self.load = load
self.power = power def run(self):
print('开动啦') class Subway(Vehicle):
def __init__(self, name, speed, load, power, line):
# self.name = name
# self.speed = speed
# self.load = load
# self.power = power super().__init__(name, speed, load, power) # 用super 调用父类 方法 不需要加 self
self.line = line
#super(Subway,self).__init__(name, speed, load, power) # 也可以这样写 和上面一样 def show_info(self):
print(self.name, self.line, self.speed, self.load, self.power) def run(self):
super().run() # 用super 调用父类 方法 不需要加self
print('%s %s线 开动了' % (self.name, self.line)) line13 = Subway('北京地铁', '10km/s', 1000000, '电', 13) line13.show_info() # 北京地铁 13 10km/s 1000000 电 line13.run() # 北京地铁 13线 开动了

Python学习第十八课——继承,接口继承等的更多相关文章

  1. Python学习第二十八课——Django(templates)

    templates 讲后台得到的数据渲染到页面上:话不多说,先看具体代码. urls: from django.conf.urls import url from django.contrib imp ...

  2. Python学习第二十八课——Django(urls)

    Django框架中的urls配置: 首先通过pycharm创建一个Django项目: 例如要写blog的功能:则在digango_lesson中的urls代码如下: """ ...

  3. JAVA学习第十四课(接口:implements及其基本应用)

    接口: 我们知道抽象类中能够定义抽象方法,也能够定义非抽象方法.当一个抽象类中的方法都是抽象方法的时候,我们就能够定义还有一种表现方式:接口(interface),所以接口是一种特殊的抽象类 接口的出 ...

  4. Python学习二十八周(vue.js)

    一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...

  5. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  6. python学习第十五天 -面向对象之继承和多态

    大家都知道面向对象的三大特性:封装,继承,多态.封装特性在上一章节已经讲解过.这一章节主要讲解继承和多态. 继承: 当定义一个类的时候,可以从现有的类进行继承.那么新定义的类可以称为子类,被继承的现有 ...

  7. Python学习第十八篇——低耦合函数设计思想

    import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...

  8. python第三十八课——面向对象(一)

    1.面向对象:(思想) 面向:看.关注.瞅 对象:个体.实体.实例.结果单词:object在python中一些皆对象 面向过程:(思想) 面向:看.关注.瞅 过程:经过.经历.从头到尾 使用一些生活中 ...

  9. Python学习日记(十八) 序列化模块

    什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...

随机推荐

  1. SOCV / POCV 模型 (3)

    STA无疑是数字集成电路设计实现方法学中最『漂亮』的模型之一,但是随意着工艺进步,local varition 的随机性及重要性增加,传统STA 的局限性日渐突出.大概在十五年前,SSTA成了一个研究 ...

  2. 一些封装的php函数

    swoole群中奥总共享的创建文件夹: function make_dir($folder){ $reval = false; if (!file_exists($folder)){ /* 如果目录不 ...

  3. JS中的数组创建,初始化

    JS中没有专门的数组类型.但是可以在程序中利用预定义的Array对象及其方法来使用数组. 在JS中有三种创建数组的方法: var arr = new Array(1,2,3,4); var arr = ...

  4. VS2017创建控制台应用后,编写完代码调试正常,使用exe文件直接执行出现闪退情况解决方法。

    这是因为代码中包含的相对路径的原因. 解决办法:把项目中包含的所有相对路径修改为绝对路径. (个人觉得因为直接执行exe文件,默认打开在C盘的用户目录下.) 例如: std::string DATA_ ...

  5. SQLite3创建表及操作

    SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表.创建基本表,涉及到命名表.定义列及每一列的数据类型. 语法 CREATE TABLE 语句的基 ...

  6. 【代码总结】数据库抽象层PDO

    一.概述 PDO就是一个"数据库访问抽象层",起作用是统一各种数据库的访问接口,能够轻松的在不同数据库之间进行切换. 二.PDO的安装 编辑php.ini文件 添加 extensi ...

  7. 批处理执行Testng

    @echo off set LIB=项目的jar路径 set CLASSPATH=%LIB%\jar\commons-beanutils-.jar;%LIB%\jar\testng.jar;%LIB% ...

  8. 吴裕雄 python 神经网络——TensorFlow训练神经网络:花瓣识别

    import os import glob import os.path import numpy as np import tensorflow as tf from tensorflow.pyth ...

  9. IDEA 查看字节码

    参考:https://www.jianshu.com/p/18953ec8c0b7 打开工具栏 输入参数: 参数: $JDKPath$\bin\javap.exe -c $FileClass$ $Ou ...

  10. C++ STL之栈stack和queue的使⽤

    写在最前面,本文摘录于柳神笔记: (1)栈 stack 在头⽂件 #include 中,是数据结构⾥⾯的栈-以下是常⽤⽤法: (2)队列 queue 在头⽂件 #include 中,是数据结构⾥⾯的队 ...