python基础--面向对象之继承
# 继承是一种创建新类的方式,新建的类可以继承一个,或者多个父类,
# 父类又可以称为基类或者超类,新建的类可以称为派生类,子类
class ParentClass1:
# 定义父类 1
pass
class ParentClass2:
# 定义父类 2
pass
class SubClass1(ParentClass1):
# 继承一个父类
pass
class SubClass2(ParentClass1,ParentClass2):
# 继承两个父类
pass
print(SubClass1.__bases__) # 查看父类
print(SubClass2.__bases__)
class Animal:
def eat(self):
print("%s is eating" %self.name)
def drink(self):
print("%s is drinking" % self.name)
def shit(self):
print("%s is shiting" %self.name)
def pee(self):
print("%s is peeing" %self.name)
# 子类可以使用父类的函数属性和数据属性
class Cat(Animal):
def __init__(self,name):
self.name = name
self.breed = "猫"
def cry(self):
print("喵喵叫")
class Dog(Animal):
def __init__(self,name):
self.name = name
self.breed = "狗"
def cry(self):
print("汪汪叫") c1 = Cat("小白家的黑猫")
c1.eat()
# 当前类中如果没有eat属性,就会去父类中找 c2 = Cat("小黑家的白猫")
c2.drink() d1 = Dog("胖子家的瘦狗")
d1.eat()
# 如果子类中有和父类中相同的属性,会优先使用子类中的属性(如果没有特殊说明)
# 因此,我们在开发的过程中,如果定义了一个类A,然后想重新建立一个类B,而且
# B的很多功能和A是相同的,我们只需要把A继承过来,然后在B中写一写不一样的功能
# 就可以了
# 注意当有继承的时候,一定要注意属性查找
class F:
def f1(self):
print("F.f1")
def f2(self):
print('F.f2')
self.f1()
class S(F):
def f1(self):
print("S.f1")
s = S()
s.f2()
# 我们来看一下代码执行过程
# s为一个对象--要执行f2方法--自己的类中没有--在父类中找--父类中有--
# 注意;父类中这个self是s--打印F.f2--然后执行f1,--先在自己类中找,--
# 找到了--打印S.f1
# 假如我们在子类中相用父类的方法,两种办法
# 一,直接用类名即:父亲名.方法名()
# 二,super()
class Animal:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender class people(Animal):
def __init__(self,name,age,gender):
Animal.__init__(self,name,age,gender)
class Cat(Animal):
def __init__(self,name,age,gender):
# 这是不用传入对象本身,
# super()相当于super(Cat,self)
super().__init__(name,age,gender)
peo = people('wangcong',21,'mal')
cat = Cat('cat',2,'male')
print(peo.name,cat.name) # wangcong cat
# 最后总结一点,有关组合和继承,
# 1,人是动物,猫是动物,这就是继承关系,
# 2,学校有教室,学生有书本。这就是组合关系,
# 一个类在另一个类中,一个对象跟另一个对象有关系
# 简单看一下组合
list1 = list() # 我们之前说list是一个类,用来实例化一个对象
str1 = "hello" # 同样str1也是一个字符串对象
list1.append(str1)
print(list1)
# 此时,他们之间就是组合关系
python基础--面向对象之继承的更多相关文章
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- python基础——面向对象进阶
python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...
- python基础——面向对象的程序设计
python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- Python 基础 面向对象之二 三大特性
Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...
- python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)
python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...
- python之面向对象(继承)
类的继承 python之面向对象(继承) 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型关系. 需要注意的地方:继承语法 c ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...
随机推荐
- 【CF1181D】Irrigation
题目大意:给定 M 个城市,每年会选出一个城市举办比赛,现给出前 N 年城市举办比赛的情况.在接下来的年份中,每年会在举办比赛次数最小的城市举办比赛,如果有很多城市举办次数均为最小值,则在编号最小的城 ...
- “==”与equals方法
“==”操作符 基本类型比较值:判断两个变量的值相等. 引用类型比较引用(是否指向同一个对象):只有指向同一个对象时才相等. 用“==”进行比较时,两边的数据类型必须兼容(可自动转换的基本数据类型除外 ...
- node 的fs.state 获取文件信息
1. fs.stat()可以获取文件的信息,用法如下: const fs = require('fs'); fs.stat('./book.js',(err,stats)=>{ if(err) ...
- JDK 7升8 maven 编译报错
在JDK由版本7升级到8时,使用maven编译会报doc错误,原因是JAVA8不支持JAVA7编写的doc,报错信息如下: @param name 未找到 @return 的用法无效 可以使添加配置- ...
- [深度学习] pytorch利用Datasets和DataLoader读取数据
本文简单描述如果自定义dataset,代码并未经过测试(只是说明思路),为半伪代码.所有逻辑需按自己需求另外实现: 一.分析DataLoader train_loader = DataLoader( ...
- jquery die()方法 语法
jquery die()方法 语法 作用:die() 方法移除所有通过 live() 方法向指定元素添加的一个或多个事件处理程序.直线电机参数 语法:$(selector).die(event,fun ...
- IE8 CSS样式兼容性清单
IE8对于CSS2.1是完整支持的,对于CSS3则只是部分支持.下文中只列出IE8完全支持及完全不支持的样式,对于. 注:下文中的E.F均指html标签名,如p,img等. At-rules At类规 ...
- C/C++预处理指令#define,条件编译#ifdefine
本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下 ...
- 手动升级 Confluence - 规划你的升级
1. 确定你的升级路径 使用下面的表格来确定最佳的升级路径来让你的Confluence 从当前版本升级到最新的 Confluence 版本. 你的版本 推荐升级到 Confluence 的升级路径 2 ...
- HGOI 20190705 题解
Problem A 树状数组 给出数x,一直执行x = x and (x+1)-1 直到 x=0 为止 询问这个数执行运算的次数. 这个数以二进制的形式表述出 x = s1 & s2 .... ...