1Python全栈之路系列之面向基础

简介:

面向对象基本介绍

Python编程方式:

  1. 面向过程编程

  2. 面向函数编程

  3. 面向对象编程

名称定义:

  1. 如果函数没有在类中称之为函数

  2. 如果函数在类中称之为方法


创建类

1
2
3
4
5
6
# 创建一个类,类名是Class_basis
class  Class_basis:
     # 在类里面创建了一个方法ret,类里面的方法必须加一个self关键字
     def  ret( self ):
         # 当调用方法的时候输出ret
         print ( "ret" )

使用类

1
2
3
4
5
# 通过Class_basis类创建一个对象obj(创建一个Class_basis实例),类名后面加括号
obj  =  Class_basis()
 
# 通过对象调用类中的ret方法
obj.ret()

类的内存地址对应关系

wKiom1j2ydjx1WDcAACTo82idw8748.png-wh_50

面向对象之self

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
# 创建一个类,类名是Class_basis
class  Class_basis:
     # 在类里面创建了一个方法ret
     def  ret( self ,):
         # 输出self的内存地址
         print ( "方法ret的self内存地址" id ( self ))
# 创建一个对象obj,类名后面加括号
obj  =  Class_basis()
 
# 输出对象obj的内存地址
print ( "obj对象内存地址" id (obj))
 
# 通过对象调用类中的ret方法
obj.ret()

执行结果

1
2
3
4
5
C:\Python35\python.exe F: / Python_code / sublime / Week06 / Day02 / class_01.py
obj对象内存地址  2420760156536
方法ret的 self 内存地址  2420760156536
 
Process finished with exit code  0

通过上面的测试可以很清楚的看到obj对象和类的方法中self内存地址是一样的,那么方法中的self就等于obj

如图

wKiom1j2yiuCOVm5AACiRJbhTmc612.png-wh_50

self是形式参数,有Python自行传递。

面向对象之封装

封装就是将内容封装到某个地方,以后再去调用被封装在某处的内容,在使用面向对象的封装特性时,需要:

  1. 将内容封装到某处

  2. 从某处调用被封装的内容

1
2
3
4
5
6
7
8
9
class  Foo:
     def  ret( self ):
         # 输出backend变量的内容
         print ( self .backend)
         
obj  =  Foo()
# 在对象中创建一个backend变量
obj.backend  =  "as"
obj.ret()

执行结果

1
2
3
4
C:\Python35\python.exe F: / Python_code / sublime / Week06 / Day02 / class_01.py
as
 
Process finished with exit code  0

上面的封装是一种非主流的封装方式,下面的__init__构造方法封装方式是主流的封装方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class  Foo:
     # 进入类的时候首先执行__init__方法
     def  __init__( self , name):
     
         """
         __init__称之为构造方法
         :param name: Foo传递过来的参数
         """
         
         # 在类中创建一个成员Name,它的值是传过来的形参name
         self .Name  =  name
     # 类的方法
     def  user( self ):
         # 输出Name的值
         print ( self .Name)
         
# 创建对象,并且将"Ansheng"封装到对象中,类+括号的时候会自动执行__init__方法
obj  =  Foo( "Ansheng" )
 
# 执行user方法
obj.user()

执行结果

1
2
3
4
C:\Python35\python.exe F: / Python_code / sublime / Week06 / Day02 / class_01.py
Ansheng
 
Process finished with exit code  0

_del_ 解释器销毁对象时候自动调用,特殊的名:析构方法

封装的应用场景之一就是当同一类型的方法具有相同参数时,直接封装到对象即可。

实例

通过用户输入年龄和姓名输出用户的个人信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
class  Foo:
     def  __init__( self , name, age):
         self .Name  =  name
         self .Age  =  age
         
     def  info( self ):
         print ( """
             My name is: %s
             My age is: %d
         """  %  ( self .Name,  self .Age))
         
ansheng  =  Foo( "Ansheng" 18 )
ansheng.info()
 
xiaoming  =  Foo( "xiaoming" 30 )
xiaoming.info()

执行结果

1
2
3
4
5
6
7
8
9
C:\Python35\python.exe F: / Python_code / sublime / Week06 / Day02 / class_01.py
 
             My name  is : Ansheng
             My age  is 18
             
             My name  is : xiaoming
             My age  is 30
             
Process finished with exit code  0

封装的应用场景之二就是把类当作模块,创建多个对象(对象内封装的数据可以不一样)

面向对象之继承基础

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

实例

创建一个信息相关的类,比如说人拥有四肢头发耳朵等信息,在创建一个中国人和外国人的类,中国人的语言是中文,皮肤是黄色,外国人的语言是英文,皮肤是黑色。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/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 ( """
         你是美国人,你的语言是英文,皮肤是黑色
         """ )
         
=  China()
c.info()
 
=  Us()
m.info()

执行结果

1
2
3
4
5
6
7
8
9
10
11
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 派生类

  1. 派生类可以集成基类中所有的功能

  2. 派生类和积累同时存在,优先找派生类

  3. Python类可以同时继承多个类

面向对象之继承之多继承(新式类)

多继承就是在class My(China, Us):括号内放入多个父类名。

多继承顺序

My(China, Us)时,因为My类中有info这个方法,所以输出的结果是我就是我

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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 ( "我就是我" )
         
=  My()
c.info()

执行结果

1
2
3
4
C:\Python35\python.exe F: / Python_code / sublime / Week06 / Day02 / class_01.py
我就是我
 
Process finished with exit code  0

My(China, Us)时,My类中没有info这个方法,输出的结果是你是中国人,默认括号内左边的类优先

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
class  China:
     def  info( self ):
         print ( "你是中国人" )
         
class  Us:
     def  info( self ):
         print ( "你是美国人" )
         
class  My(China, Us):
     pass
     
=  My()
c.info()

执行结果

1
2
3
4
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这个方法,输出的结果是你是美国人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
class  China:
     pass
     
class  Us:
     def  info( self ):
         print ( "你是美国人" )
         
class  My(China, Us):
     pass
     
=  My()
c.info()

执行结果

1
2
3
4
C:\Python35\python.exe F: / Python_code / sublime / Week06 / Day02 / class_01.py
你是美国人
 
Process finished with exit code  0

面向对象之继承之多继承时的查找顺序

  • 顶层两个类没有父类的情况

wKioL1j2ykjiIDDNAABuzYaVqYg752.png-wh_50

  • 顶层两个类有父类的情况

wKiom1j2ylqSzPRGAACDJvdukGM735.png-wh_50










本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1917282,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
613 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
|
9月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
407 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
807 45
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
449 2
|
JSON 数据库 开发者
FastAPI入门指南:Python开发者必看——从零基础到精通,掌握FastAPI的全栈式Web开发流程,解锁高效编码的秘密!
【8月更文挑战第31天】在当今的Web开发领域,FastAPI迅速成为开发者的热门选择。本指南带领Python开发者快速入门FastAPI,涵盖环境搭建、基础代码、路径参数、请求体处理、数据库操作及异常处理等内容,帮助你轻松掌握这一高效Web框架。通过实践操作,你将学会构建高性能的Web应用,并为后续复杂项目打下坚实基础。
902 0
|
前端开发 JavaScript 测试技术
Python中的全栈开发
【6月更文挑战第6天】本文探讨了Python在全栈开发中的应用,展示了如何利用Python的Django和Flask框架进行后端开发,以及与JavaScript前端框架的集成。文中通过示例介绍了Django和Flask的基本用法,并讨论了全栈开发中的前端集成、CORS问题、数据传输、身份验证、异步编程、性能优化、日志记录、错误处理、测试、安全性、数据库集成、实时通信、缓存和扩展功能。此外,还强调了全栈开发涉及的团队协作、项目管理和用户体验,指出Python为全栈开发提供了强有力的支持。
|
Python
老男孩&路飞学城Python全栈
老男孩&路飞学城的Python全栈开发重点班由ALEX老师主讲,核心教学内容,100多天课程,近100G资料,含基础到实战。一线技术专家亲授,以案例教学引导学生逐步进入项目实战。
382 1
老男孩&路飞学城Python全栈
|
测试技术 数据库 开发者
Python全栈测试开发Chapter11 Mock测试
总结起来,Mock测试是一种有效的隔离测试环境、提高测试效率的方法,它让我们能够在不依赖外部条件的情况下进行全面的单元测试。在Python全栈测试中,Mock的应用是一种非常实用的技能。
242 0
|
安全 前端开发 JavaScript
Python 全栈安全(三)(4)
Python 全栈安全(三)
132 1
|
XML SQL 安全
Python 全栈安全(三)(3)
Python 全栈安全(三)
262 1

推荐镜像

更多