2Python全栈之路系列之面向对象进阶及类成员

简介:

再次了解多继承

先来一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
class  A:
     def  bar( self ):
         print ( "BAR" )
         self .f1()
         
class  B(A):
     def  f1( self ):
         print ( "B" )
         
class  C:
     def  f1( self ):
         print ( "C" )
         
class  D(C, B):
     pass
     
obj  =  D()
obj.bar()

执行结果

1
2
3
4
5
/ usr / bin / python3. 5  / home / ansheng / 文档 / Python_code / sublime / Week06 / Day03 / s1.py
BAR
C
 
Process finished with exit code  0

流程释意:

  1. 创建了类A、B、C、D;

  2. D继承了CBB继承了AD内什么都不做,pass

  3. 创建一个对象obj,类是D,当执行Dbar方法的时候会先从C里面寻找有没有bar方法;

  4. C内没有bar方法,然后继续从B里面查找,B里面也没有,B的父类是AA里面有bar方法,所以就执行了Abar方法;

  5. Abar方法首先输出了BAR

  6. 然后又执行了self.f1()self=obj,相当于执行了obj.f1()

  7. 执行obj.f1()的时候先从C里面查找有没有f1这个方法,C里面又f1这个方法;

  8. 最后就执行C里面的f1方法了,输出了C

执行父类的构造方法

1
2
3
4
5
6
7
8
9
10
11
12
13
class  Annimal:
     def  __init__( self ):
         print ( "Annimal的构造方法" )
         self .ty  =  "动物"
         
class  Cat(Annimal):
     def  __init__( self ):
         print ( "Cat的构造方法" )
         self .n  =  "猫"
         # 寻找Cat类的父类,然后执行父类的构造方法
         super (Cat,  self ).__init__()
mao  =  Cat()
print (mao.__dict__)

执行结果

1
2
3
4
5
6
/ usr / bin / python3. 5  / home / ansheng / 文档 / Python_code / sublime / Week06 / Day03 / s1.py
Cat的构造方法
Annimal的构造方法
{ 'ty' '动物' 'n' '猫' }
 
Process finished with exit code  0

先执行了Cat的构造方法,然后又执行了Annimal的构造方法。
第二种执行父类的方法如下:

1
Annimal.__init__( 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  Foo:
     def  __init__( self , name):
         self .name  =  name
     def  show( self ):
         print ( 'show' )
         
obj  =  Foo( "as" )
 
# 如果是类,就只能找到类里的成员
print ( hasattr (Foo,  "show" ))
 
# 如果是对象,既可以找到对象,也可以找类里的成员
print ( hasattr (obj,  "name" ))
print ( hasattr (obj,  "show" ))

执行结果

1
2
3
4
5
6
/ usr / bin / python3. 5  / home / ansheng / 文档 / Python_code / sublime / Week06 / Day03 / s2.py
True
True
True
 
Process finished with exit code  0

利用反射导入模块、查找类、创建对象、查找对象中的字段

s1脚本文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python
# _*_coding:utf-8 _*_
 
# 导入模块
=  __import__ ( 's2' , fromlist = True )
 
# 去模块中找类
class_name  =  getattr (m,  "Foo" )
 
# 根据类创建对象
obj  =  class_name( "ansheng" )
 
# 去对象中找name对应的值
print ( getattr (obj,  'name' ))

s2脚本文件内容

1
2
3
4
5
6
7
#!/usr/bin/env python
# _*_coding:utf-8 _*_
 
class  Foo:
     def  __init__( self , name):
         # 普通字段,保存在对象中
         self .name  =  name

执行结果:

1
2
3
4
/ usr / bin / python3. 5  / home / ansheng / 文档 / Python_code / sublime / Week06 / Day04 / s1.py
ansheng
 
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
#!/usr/bin/env python
# _*_coding:utf-8 _*_
 
# 静态字段存在的意义就是将每个对象中重复的东西在类里面保存一份即可,这就是静态字段
 
class  Provice:
 
     # 静态字段
     contry  =  "China"
     
     def  __init__( self , name):
         self .name  =  name
         
     def  show( self ):
         print (Provice.contry,  self .name)
         
hebei  =  Provice( "河北" )
hebei.show()
 
hubei  =  Provice( "湖北" )
hubei.show()

执行结果

1
2
3
4
5
/ usr / bin / python3. 5  / home / ansheng / 文档 / Python_code / sublime / Week06 / Day04 / s2.py
China 河北
China 湖北
 
Process finished with exit code  0

类里面的成员类去访问,对象内的成员用对象去访问。

面向对象类成员之静态方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python
# _*_coding:utf-8 _*_
 
class  Foo:
 
     # 静态方法括号内没有self,切方法前一行要加上@staticmethod
     @ staticmethod
     def  static():
     # def static(arg1, arg2): # 也可以设置参数
         print ( "static" )
         
# 静态方法通过类名+方法名既可执行
Foo.static()
# Foo.static("arg1", "arg2") 通过类调用的时候传入对于的参数即可
 
# 静态方法也可以通过对象去访问,对于静态方法用类去访问
obj  =  Foo()
obj.static(

执行结果

/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.py
static
static

Process finished with exit code 0

面向对象类成员之类方法

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
# _*_coding:utf-8 _*_
 
class  Foo:
 
     # 创建类方法的时候需要在方法前面加上@classmethod
     @ classmethod
     def  ClassMethod ( cls ):  # 并且方法的括号内必须带有cls关键字,类方法的参数是当前类的类名
         print ( "类方法" )
         
# 调用类方法
Foo. ClassMethod ()

执行结果:

1
2
3
4
/ usr / bin / python3. 5  / home / ansheng / 文档 / Python_code / sublime / Week06 / Day04 / s2.py
类方法
 
Process finished with exit code  0

面向对象类成员内容梳理

字段

1.静态字段(每个对象都有一份)
2.普通字段(每个对象都不同的数据)

方法

1.静态方法(无需使用对象封装的内容)
2.类方法
3.普通方法(适用对象中的数据)

特性

1.普通特性(将方法未造成字段)

快速判断,类执行、对象执行:

1.self —> 对象调用
2.无self —> 类调用










本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1917743,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
792 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
|
12月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
630 1
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
825 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
357 11
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
367 1
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
945 45
|
Python
Python面向对象(2)
【10月更文挑战第14天】
269 6
Python面向对象(2)
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
214 2
Python面向对象

推荐镜像

更多