• 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
    

      

  • 相关阅读:
    C#显示接口实现和隐式接口实现
    JAVA8新特性总结一(接口函数默认实现)
    接口(策略设计模式)
    自定义注解
    C# Task的GetAwaiter和ConfigureAwait
    UNIX(编程-进程处理):30---僵死进程、孤儿进程(SIGCLD、SIGHCLD信号处理)
    C# 静态变量会被gc回收么?
    C# 托管资源与非托管资源
    WebSocket与消息推送
    Quartz.NET实现作业调度
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/8504310.html
Copyright © 2020-2023  润新知