Python 学习笔记 - 面向对象(其他)

简介:

这是面向对象的最后一个部分。


首先看两个函数。

1.isinstance(obj, cls)

 检查是否obj是否是类 cls 的对象

2.issubclass(sub, super)

检查sub类是否是 super 类的派生类

1
2
3
4
5
6
7
8
9
10
11
12
13
class  Bar:
     pass
class  Foo(Bar):
     pass
obj  =  Foo()
# obj,Bar(obj类型和obj类型的父类)的实例
ret  =  isinstance (obj, Bar)
print (ret)
ret  =  issubclass (Bar,Foo)
print (ret)
- - - - - - - - - - - - - - - - - -
True
False

3.super

默认情况下,当子类和父类有同名的方法时候,子类的对象调用这个方法是调用的子类的方法。super可以强制调用父类的方法。

比如说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class  C1:
     def  f1( self ):
         print ( 'c1.f1' )
         return  123
class  C2(C1):
     def  f1( self ):
         # 主动执行父类的f1方法
         ret  =  super (C2, self ).f1()
         print ( 'c2.f1' )
         return  ret
obj  =  C2()
m = obj.f1()
print (m)
- - - - - - - - - - -
c1.f1
c2.f1
123


这种方式使得我们可以灵活地扩展现有的类,增加新的功能,而不需要去修改现有的代码。相对应的,如果使用装饰器的话 我们需要去修改原有的代码。


比如,通过super的方式自定义一个有序的字典,基本思路是把key放在一个列表里面,因为列表是有序的,因此我们取值的时候通过列表取到key,然后再通过key取到对应的value,最后重新拼接一下输出


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class  MyDict( dict ):
     def  __init__( self ):
         self .li  =  []
         super (MyDict, self ).__init__()
     def  __setitem__( self , key, value):
         self .li.append(key)
         super (MyDict, self ).__setitem__(key,value)
     def  __str__( self ):
         temp_list  =  []
         for  key  in  self .li:
             value  =  self .get(key)
             temp_list.append( "'%s':%s"  % (key,value,))
         temp_str  =  "{"  +  "," .join(temp_list)  +  "}"
         return  temp_str
#
obj  =  MyDict()
obj[ 'k1' =  123
obj[ 'k2' =  456
print (obj)





本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1858805,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
176 2
|
1月前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
4月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
6月前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
56 6
Python面向对象(2)
|
6月前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
50 2
Python面向对象
|
6月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
1332 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
6月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
259 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
6月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
330 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
6月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
112 1
|
6月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
302 1

热门文章

最新文章

下一篇
oss创建bucket