Python 学习笔记 - 面向对象(特殊成员)

简介:

下面是类的特殊成员,当我们执行一些特定操作时候,会自动调用这些特殊的方法


1. __doc__

  表示类的描述信息

1
2
3
4
5
6
7
8
>>>  class  Foo:
     """ 描述类信息,这是用于看片的神奇 """
     def  func( self ):
         pass
print  (Foo.__doc__)
#输出:类的描述信息
- - - - - - - - - - - - -
  描述类信息,这是用于看片的神奇

2. __module__ 和  __class__ 

  __module__ 表示当前操作的对象在那个模块

  __class__     表示当前操作的对象的类是什么

1
2
3
4
5
6
7
from  qq  import  person
John = person( 'John' , 'male' , 30 , 20 )
print (John.__module__)
print (John.__class__)
- - - - - - - - - - - - - -
qq
< class  'qq.person' >


3. __init__

  构造方法,通过类创建对象时,自动触发执行

1
2
3
4
class  Foo:
     def  __init__( self , name):
         self .name  =  name
         self .age  =  18



obj = Foo('aa') # 自动执行类中的 __init__ 方法


4. __del__

  析构方法,当对象在内存中被释放时,自动触发执行。

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

5. __call__

  对象后面加括号,触发执行。

注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

1
2
3
4
5
6
7
8
9
class  Foo:
     def  __init__( self ):
         pass
     def  __call__( self * args,  * * kwargs):
         print ( '__call__' )
obj  =  Foo()   # 执行 __init__
obj()   # 执行 __call__
- - - - -
__call__


6. __dict__

  类或对象中的所有成员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class  Province:
     country  =  'China'
     def  __init__( self , name, count):
         self .name  =  name
         self .count  =  count
     def  func( self * args,  * * kwargs):
         print  ( 'func' )
# 获取类的成员,即:静态字段、方法、
print  (Province.__dict__)
# 输出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None}
obj1  =  Province( 'HeBei' , 10000 )
print  (obj1.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': 10000, 'name': 'HeBei'}
obj2  =  Province( 'HeNan' 3888 )
print  (obj2.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': 3888, 'name': 'HeNan'}
- - - - - - - - - - - - - -
{ 'country' 'China' 'func' : <function Province.func at  0x000002286C21C620 >,  '__dict__' : <attribute  '__dict__'  of  'Province'  objects>,  '__doc__' None '__weakref__' : <attribute  '__weakref__'  of  'Province'  objects>,  '__module__' '__main__' '__init__' : <function Province.__init__ at  0x000002286C21C598 >}
{ 'count' 10000 'name' 'HeBei' }
{ 'count' 3888 'name' 'HeNan' }

 7. __str__

  如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

1
2
3
4
5
6
>>>  class  Foo:
     def  __str__( self ):
         return  'hhh'
obj  =  Foo()
print (obj)
hhh


8、__getitem__、__setitem__、__delitem__

用于索引操作,如字典。以上分别表示获取、设置、删除数据;也可以用于列表操作,分别表示获取,切片,删除


字典操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>>  class  Foo( object ):
     def  __getitem__( self , key):
         print ( '__getitem__' , key)
     def  __setitem__( self , key, value):
         print ( '__setitem__' , key, value)
     def  __delitem__( self , key):
         print ( '__delitem__' , key)
obj  =  Foo()
result  =  obj[ 'k1' ]   # 自动触发执行 __getitem__
obj[ 'k2' =  'bb'   # 自动触发执行 __setitem__
del  obj[ 'k1' ]   # 自动触发执行 __delitem__
__getitem__ k1
__setitem__ k2 bb
__delitem__ k1


列表操作(切片)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>  class  Foo( object ):
     def  __getitem__( self , key):
         print ( '__getitem__' , key, type (key))
     def  __setitem__( self , key, value):
         print ( '__setitem__' type (key),  type (value))
     def  __delitem__( self , key):
         print ( '__delitem__' , key)
obj  =  Foo()
result = obj[ 0 : 3 ]
print (result)
obj[ 1 : 3 ] = [ 2 , 3 , 4 , 5 , 6 , 7 ]
del  obj[ 2 : 3 ]
- - - - - - - - - - - - - - - - - - - - - -
__getitem__  slice ( 0 3 None ) < class  'slice' >
None
__setitem__ < class  'slice' > < class  'list' >
__delitem__  slice ( 2 3 None )



9. __iter__ 

用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了 __iter__

1
2
3
4
5
6
7
8
9
10
11
12
13
>>>  class  Foo( object ):
     def  __init__( self , sq):
         self .sq  =  sq
     def  __iter__( self ):
         return  iter ( self .sq)
obj  =  Foo([ 11 , 22 , 33 , 44 ])
for  in  obj:
     print (i)
- - - - - - - - - - - -
11
22
33
44





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

目录
相关文章
|
2月前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
5月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
7月前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
70 6
Python面向对象(2)
|
7月前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
60 2
Python面向对象
|
6月前
|
Python
Python成员运算符
Python成员运算符
69 2
|
7月前
|
网络协议 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访问网络视频流的技巧。
1508 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
7月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
286 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
7月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
368 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
7月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
120 1
|
7月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
337 1

推荐镜像

更多
下一篇
阿里云OSS
OSZAR »