Python全栈之路系列之面向对象基础
面向对象基本介绍
Python编程方式:
- 面向过程编程
- 面向函数编程
- 面向对象编程
名称定义:
- 如果函数没有在类中称之为
函数
- 如果函数在类中称之为
方法
创建类
在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
# 创建一个类,类名是Class_basis
class Class_basis:# 在类里面创建了一个方法ret,类里面的方法必须加一个self关键字def ret(self):# 当调用方法的时候输出retprint("ret")
使用类
# 通过Class_basis类创建一个对象obj(创建一个Class_basis实例),类名后面加括号
obj = Class_basis()# 通过对象调用类中的ret方法
obj.ret()
类的内存地址对应关系
面向对象之self
#!/usr/bin/env python
# _*_ coding:utf-8 _*_# 创建一个类,类名是Class_basis
class Class_basis:# 在类里面创建了一个方法retdef ret(self,):# 输出self的内存地址print("方法ret的self内存地址", id(self))# 创建一个对象obj,类名后面加括号
obj = Class_basis()# 输出对象obj的内存地址
print("obj对象内存地址", id(obj))# 通过对象调用类中的ret方法
obj.ret()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
obj对象内存地址 2420760156536
方法ret的self内存地址 2420760156536Process finished with exit code 0
通过上面的测试可以很清楚的看到obj
对象和类的方法中self
内存地址是一样的,那么方法中的self
就等于obj
如图
self
是形式参数,有Python自行传递。
面向对象之封装
封装就是将内容封装到某个地方,以后再去调用被封装在某处的内容,在使用面向对象的封装特性时,需要:
- 将内容封装到某处
- 从某处调用被封装的内容
class Foo:def ret(self):# 输出backend变量的内容print(self.backend)obj = Foo()
# 在对象中创建一个backend变量
obj.backend = "as"
obj.ret()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
asProcess finished with exit code 0
上面的封装是一种非主流的封装方式,下面的__init__构造方法
封装方式是主流的封装方式。
class Foo:# 进入类的时候首先执行__init__方法def __init__(self, name):"""__init__称之为构造方法:param name: Foo传递过来的参数"""# 在类中创建一个成员Name,它的值是传过来的形参nameself.Name = name# 类的方法def user(self):# 输出Name的值print(self.Name)# 创建对象,并且将"Ansheng"封装到对象中,类+括号的时候会自动执行__init__方法
obj = Foo("Ansheng")# 执行user方法
obj.user()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
AnshengProcess finished with exit code 0
del 解释器销毁对象时候自动调用,特殊的名:析构方法
封装的应用场景之一就是当同一类型的方法具有相同参数时,直接封装到对象即可。
实例
通过用户输入年龄和姓名输出用户的个人信息
#!/usr/bin/env python
# _*_ coding:utf-8 _*_class Foo:def __init__(self, name, age):self.Name = nameself.Age = agedef info(self):print("""My name is: %sMy age is: %d""" % (self.Name, self.Age))ansheng = Foo("Ansheng", 18)
ansheng.info()xiaoming = Foo("xiaoming", 30)
xiaoming.info()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.pyMy name is: AnshengMy age is: 18My name is: xiaomingMy age is: 30Process finished with exit code 0
封装的应用场景之二就是把类当作模块,创建多个对象(对象内封装的数据可以不一样)
面向对象之继承基础
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
实例
创建一个人
信息相关的类,比如说人拥有四肢
、头发
、眼
、耳朵
等信息,在创建一个中国人和外国人的类,中国人的语言是中文,皮肤是黄色,外国人的语言是英文,皮肤是黑色。
#!/usr/bin/env python
# _*_ coding:utf-8 _*_class People:def __init__(self):print("""你的通用特征有:四肢、头发、眼、耳朵""")class China(People):def info(self):print("""你是中国人,你的语言是中文,皮肤是黄色""")class Us(People):def info(self):print("""你是美国人,你的语言是英文,皮肤是黑色""")c = China()
c.info()m = Us()
m.info()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py你的通用特征有:四肢、头发、眼、耳朵你是中国人,你的语言是中文,皮肤是黄色你的通用特征有:四肢、头发、眼、耳朵你是美国人,你的语言是英文,皮肤是黑色Process finished with exit code 0
People
–> 父类
or 基类
China
and Us
–> 子类
or 派生类
- 派生类可以集成基类中所有的功能
- 派生类和积累同时存在,优先找派生类
- Python类可以同时继承多个类
面向对象之继承之多继承(新式类)
多继承就是在class My(China, Us):
括号内放入多个父类名。
多继承顺序
当My(China, Us)
时,因为My
类中有info
这个方法,所以输出的结果是我就是我
#!/usr/bin/env python
# _*_ coding:utf-8 _*_class China:def info(self):print("你是中国人")class Us:def info(self):print("你是美国人")class My(China, Us):def info(self):print("我就是我")c = My()
c.info()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
我就是我Process finished with exit code 0
当My(China, Us)
时,My
类中没有info
这个方法,输出的结果是你是中国人
,默认括号内左边的类优先
#!/usr/bin/env python
# _*_ coding:utf-8 _*_class China:def info(self):print("你是中国人")class Us:def info(self):print("你是美国人")class My(China, Us):passc = My()
c.info()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
你是中国人Process finished with exit code 0
当My(China, Us)
时,My
类中没有info
这个方法,China
类中也没有info
这个方法,输出的结果是你是美国人
#!/usr/bin/env python
# _*_ coding:utf-8 _*_class China:passclass Us:def info(self):print("你是美国人")class My(China, Us):passc = My()
c.info()
执行结果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
你是美国人Process finished with exit code 0
面向对象之继承之多继承时的查找顺序
- 顶层两个类没有父类的情况
- 顶层两个类有父类的情况
如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!交流经验!自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地
Python全栈之路系列之面向对象基础相关推荐
- Python全栈之路系列之数字数据类型
上篇文章中我们简单的体验了Python语言基本概念与语法,那么在继续深入下去的过程中,不妨先学习几个常见的Python内置数据类型?这也是大部分Python教科书的学习目录,由浅至深,慢慢深入. Py ...
- Python全栈之路系列----之-----内置函数和匿名函数lamdba
引子 什么是内置函数? 内置函数就是python 提供给我们直接拿来就可以用的函数 内置函数--内置命名空间 只管调用 不管实现 总共68个 def func(): == #这是自己定义的函数 ...
- Python全栈之路系列之基础篇
Python的诞生 Python是著名的"龟叔"Guido van Rossum(吉多·范罗苏姆)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python语 ...
- 4Python全栈之路系列之Django模型
Python全栈之路系列之Django模型 MTV开发模式 把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的Model-View-Controller(MVC)模式.在这个模式中 ...
- 2Python全栈之路系列之基于socket实现聊天机器人
Python全栈之路系列之基于socket实现聊天机器人 通过socket实现局域网内的聊天工具. service.py文件如下: #!/usr/bin/env python # _*_ coding ...
- 1Python全栈之路系列Web框架介绍
Python全栈之路系列之Web框架介绍 所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来 Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理, ...
- 2Python全栈之路系列之MysQl基本数据类型
Python全栈之路系列之MySQL基本数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类: 数字类型 日期和时间类型 字符串类型 数字类 ...
- 1Python全栈之路系列之MySQL数据库基本操作
Python全栈之路系列之MySQL数据库基本操作 MySQL数据库介绍 MySQL是一种快速易用的关系型数据库管理系统(RDBMS),很多企业都在使用它来构建自己的数据库. MySQL由一家瑞典公司 ...
- 5Python全栈之路系列之字符串格式化
Python全栈之路系列之字符串格式化 This PEP proposes a new system for built-in string formatting operations, intend ...
最新文章
- 如何计算两个文档的相似度(一)
- Harbor仓库的管理
- Java监听器的用法(一):内部类监听器
- 简述 Python 的 Numpy、SciPy、Pandas、Matplotlib 的区别
- Golang实践录:命令行cobra库实例再三优化
- DataTables之TableTools插件
- 黑苹果alc269声卡仿冒id_ALC269声卡仿冒驱动的制作问题,请紫米、威廉等高手指导一下。...
- window.dialogArguments只兼容ie的问题解决
- matlab生成音阶,MATLAB 数字电子琴的功能
电子琴的每个音阶均对应一个特定频率的信号 联合开发网 - pudn.com...
- fowin自动交易和量化交易和合约交易
- 解决margin塌陷问题
- MyBatis和MyBatis-plus教程
- HTTPS – 证书签发申请(CSR) - qikegu.com
- pmml(模型标准化)
- 基于单例模式的多键值序列号生成器实现(支持缓存)
- 建筑行业股权激励方案
- c语言程序小灯从右向左闪烁,单片机控制LED灯点亮(C语言).PPT
- python银行自动取款机系统详写
- 非标准化疾病诉求的简单分诊方案总结
- 2022个人所得税退税今日开始超过6万不足12万退税吗?退多少?