码迷,mamicode.com
首页 > 编程语言 > 详细

Python 类的特殊成员方法

时间:2018-01-11 15:42:49      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:顺序   *args   class   doc   删除   属性   自定义   索引   构造方法   

 
类的特殊成员方法

 

 

1.__doc__ :打印类的描述信息

技术分享图片
class Foo:    """ 描述类信息,这是用于看片的神奇 """     def func(self):        pass print Foo.__doc__#输出:类的描述信息
技术分享图片

 

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

class C:    def __init__(self):        self.name = ‘wupeiqi‘

 

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

from lib.aa import Cobj = C()print obj.__module__  # 输出 lib.aa,即:输出模块print obj.__class__      # 输出 lib.aa.C,即:输出类

 

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

技术分享图片
class Role(object):    #初始化函数,在生成一个角色时要    初始化的一些属性就填写在这里        def __init__(self,name,role,weapon,life_value=100,money=15000):        #__init__中的第一个参数self,和这里的self都 是什么意思? 看下面解释self.name = name        self.role = role
技术分享图片

 

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

技术分享图片
class Role(object):    def __init__(self,name,role,weapon:        self.name = name        self.role = role        self.weapon = weapon    def __del__(self):             #析构函数        print("del.....run...")r1 = Role(‘Alex‘,‘police‘,‘AK47‘)    #生成一个角色
技术分享图片

 

6.__call__:对象后面加括号,触发执行

技术分享图片
#注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()class Foo:     def __init__(self):        pass         def __call__(self, *args, **kwargs):         print ‘__call__‘ obj = Foo() # 执行 __init__obj()       # 执行 __call__
技术分享图片

 

7.__dict__:查看类或对象中的所有成员

print(类.__dict__) # 打印类里所有属性,不包括实例属性print(实例.__dict__) #打印实例所有属性,不包括类属性

 

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

技术分享图片
class Foo:     def __str__(self):        return ‘alex li‘ obj = Foo()print obj# 输出:alex li
技术分享图片

 

9.__getitem__、__setitem__、__delitem__:

注:用于索引操作,如字典。以上分别表示获取、设置、删除数据

技术分享图片
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‘] = ‘alex‘   # 自动触发执行 __setitem__del obj[‘k1‘]   
技术分享图片

 

10.__new__\__metaclass__ *(自定义类)

__new__:是用来创建实例的,对类实例化之前进行定制,可以用到。

__metaclass__:定义一个类如何被创建

类的生成 调用 顺序依次是 __new__ --> __init__ --> __call__

技术分享图片
#创建类特殊方式def func(self):    print(self.name,self.age)def __init__(self,name,age):    self.name = name    self.age = age#通过Type实例化产生的Foo类,Foo是Type的对象。#(object,)加入“,”是为了让括号知道他是个元组。#type第一个参数:类名#type第二个参数:当前类的基类#type第三个参数:类的成员Foo = type(‘Foo‘,(object,),{‘talk‘:func,                            ‘__init__‘:__init__})f= Foo("Chrn",22)f.talk()print(type(Foo))#Type 为 类的类,所有类都是Type创建的
技术分享图片

技术分享图片

 metaclass 详解文章:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python 得票最高那个答案写的非常好。

Python 类的特殊成员方法

标签:顺序   *args   class   doc   删除   属性   自定义   索引   构造方法   

原文地址:https://www.cnblogs.com/bearkchan/p/8267749.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!