码迷,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
迷上了代码!