IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python第九章 面向对象编程(下) -> 正文阅读

[Python知识库]Python第九章 面向对象编程(下)

继承

继承是面向对象程序设计的重要特征,也是实现“代码复用”的重要手段
已有的类称为“父类或者基类”,新的类称为“子类或者派生类”

class 子类类名(父类1[,父类2,……]:
	类体

如果在类定义中没有指定父类,则默认父类是object类。也就是说,object是所有类的父类,里面定义了一些所有类共有的默认实现,比如:new()
定义子类时,必须在其构造函数中调用父类的构造函数,格式如下:

父类名._init_(self,参数列表)
class Person:
	def _init_(self,name,age):
		self.name=name
		self.age=age
	def say_age(self):
		print("年龄不知道")
class Student(Person):
	def _init_(self,name,age,score):
		Person._init_(self,name,age)#必须显示的调用父类初始化方法,不然解释器不会调用
		self.score=score
print(Student.mro())#显示继承层次
s=Student("wwj",10,60)
s.say_age()
print(s.name)

类成员的继承和重写

1、成员继承:子类继承父类的构造方法之外的所有成员
2、方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类的方法,也称为“重写”

查看类的继承层次结构

通过类的方法mro()或者类的属性_mro_可以输出这个类的继承层次

class A:pass
class B(A):pass
class C(B):pass
print(C.mro())

object根类

object类是所有类的父类,因此所有类都有object类的属性和方法。

dir()查看对象属性

方便的看到指定对象的所有属性

class Person:
	def _init_(self,name,age):
		self.name=name
		self.age=age
	def say_age(self):
		print(self.name,'的年龄是:',self.age)
obj=object()
print(dir(obj))
p2=Person('wwj',10)
print(dir(p2))

从上面结果可以发现:
1、Person对象增加了六个属性:
dict module weakref age name say_age
2、object的所有属性,Person类作为object子类,显然包含所有的属性
3、我们打印age、name、say_age,发现say_age虽然是方法,实际上也是属性。只不过这个属性的类型是“method”而已

重写_str_()方法

object有一个_str_()方法,用于返回一个对于“对象的描述”,对应于内置函数str()经常用到print()方法,帮助我们查看对象的信息,str()可以重写

class Person:
	def _init_(self,name):
		self.name=name
	def _str_(self):
		return "名字是:{0}".format(self.name)
p=Person('wwj')
print(p)

多重继承

Python支持多重继承,一个子类可以有多个“直接父类”。这样,就具备了“多个父类”的特点。但由于,这样会被“类的整体层次”搞复杂,尽量避免使用

mro()函数

Python支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将“从左向右”按顺序搜索
mro:方法解析顺序。可以通过mro()方法获得“类的层次结构”,方法解释顺序也是按照这个“类的结构层次”寻找的

super()获得父类定义

在子类中,如果想要获得父类的方法时,可以通过super()来做
super()代表父类的定义,不是父类对象

class A:
	def say(self):
		print('A',self)
class B(A):
	def say(self):
		#A.say(self)
		super().say()
		print('B',self)
B().say()

多态

多态是指同一个方法调用由于对象不同可能会产生不同的行为。
关于多态要注意一下2点:
1、多态是方法的多态,属性没有多态
2、多态的存在有2个必要条件:继承、方法重写

class Man:
	def eat(self):
		print("吃饭")
class Chinese(Man):
	def eat(self):
		print("筷子")
class English(Man):
	def eat(self):
		print("刀叉")
def manEat(m):
	if isinstance(m,Man):
		m.eat()
	else:
		print("不吃")
manEat(Chinese())
manEat(English())

特殊方法和运算符重载

Python的运算符实际上上通过调用对象的特殊方法实现的。

a=20
b=30
c=a+b
d=a._add_(b)
print("c=",c)
print("d=",d)
'''
运行结果:
a=50
b=50
'''

常见的特殊方法统计如下:

方法说明例子
init构造方法对象创建:p=Person()
del析构方法对象回收
repr,str打印,换行print(a)
call函数调用a()
getattr点号运算a.xxx
setattr属性赋值a.xxx=value
getitem索引运算a[key]
setitem索引赋值a[key]=value
len长度len(a)

每个运算符实际上都对应了相应的方法:

运算符特殊方法说明
运算符+add加法
运算符-sub减法
<,<=,==lt,le,eq比较运算符
>,>=,!=gt,ge,ne比较运算符
l,^,&or,xor,and或,异或,与
<<,>>lshift,rshift_左移,右移
*,/,%,//mul,truediv,mod,floordiv乘,浮点除,模运算(取余),整数除
**pow指数运算
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:08:04  更:2021-08-03 11:08:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 23:33:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码