zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    对象池使用时要注意几点
    Flash3D学习计划(一)——3D渲染的一般管线流程
    714. Best Time to Buy and Sell Stock with Transaction Fee
    712. Minimum ASCII Delete Sum for Two Strings
    647. Palindromic Substrings(马拉车算法)
    413. Arithmetic Slices
    877. Stone Game
    338. Counting Bits
    303. Range Sum Query
    198. House Robber
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/8504310.html
Copyright © 2011-2022 走看看