python_105_类的特殊成员方法

aa.py

class C():
    def __init__(self):
        self.name='QiZhiguang'

类的特殊成员方法:  

# 1. __doc__  表示类的描述信息
class Dog(object):
    '''描述信息:这个类是描述狗这个对象的'''
    def __init__(self,name):
        self.name=name
    def talk(self):
        print('吃饱了')
print(Dog.__doc__)#不用实例化
# 2. __module__ 和  __class__
#   __module__ 表示当前操作的对象在那个模块
#   __class__     表示当前操作的对象的类是什么
from lib.aa import C
obj=C()
print(obj.__module__)  #输出 lib.aa  即:输出模块
print(obj.__class__)   #输出 lib.aa.C   即:输出类
# 3. __init__ 构造方法,通过类创建对象时,自动触发执行。
# 4.__del__
# 析构方法,当对象在内存中被释放时,自动触发执行。
# 注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的
# 5. __call__ 对象后面加括号,触发执行。
# 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
class Dog(object):
    def __init__(self,name):
        self.name=name
    def talk(self):
        print('吃饱了')
    def __call__(self, *args, **kwargs):
        print('running call')
        print(args,kwargs)
d=Dog('huzi')
d()
d(123,name=333)
Dog('huzi')()
Dog('huzi')(123,name=333)
# 6. __dict__ 查看类或对象中的所有成员
class Cat(object):
    n=13
    def __init__(self,name):
        self.name=name
        self.__food=None
    def eat(self):
        print('eating')
print(Dog.__dict__)#把上述类中所有的方法以字典形式打印出来,打印类里所有属性,不包括实例属性
c=Cat('白静怡')
print(c.__dict__)#打印所有实例属性,不包括类属性
print(c)#打印的只是内存地址,功能变化下#7
#7.__str__ 如果一个类中定义了__str__方法,那么在打印对象时,默认输出该方法的返回值。
class Cat(object):
    def __init__(self,name):
        self.name=name
    def eat(self):
        print('eating')
    def __str__(self):
        return '<obj:%s>'%self.name
c=Cat('白静怡')
print(c)
# 8.__getitem__、__setitem__、__delitem__
# 用于索引操作,如字典。以上分别表示获取、设置、删除数据
class Foo(object):
    def __init__(self):
        self.data={}
    def __getitem__(self, key):
        print('__getitem__', key)
        return  self.data.get(key)
    def __setitem__(self, key, value):
        print('__setitem__', key, value)
        self.data[key]=value
    def __delitem__(self, key):
        print('__delitem__', key)
obj = Foo()
obj['name']='qiqi'
print(obj['name'])
print(obj.data)
# result = obj['k1']  # 自动触发执行 __getitem__
# obj['k2'] = 'alex'  # 自动触发执行 __setitem__
del obj['k1']
#http://www.cnblogs.com/alex3714/articles/5213184.html

  

posted @ 2018-03-04 12:13  耐烦不急  阅读(257)  评论(0编辑  收藏  举报