zoukankan      html  css  js  c++  java
  • 类的特殊成员方法

    __doc__ 返回类的表述信息

    class Person(object):
        '''
            这是用来描述人的类
        '''
    
    p = Person()
    print(p.__doc__) 
    #                 这是用来描述人的类

    __module__ 和__class__

    __module__ 返回所属模块

    __class__ 返回所属类

    print(p.__module__)
    print(p.__class__)

    __main__
    # 表示当前模块?
    <class '__main__.Person'>    # Person类

    __call__ 对象后面加括号,出发执行

    class Person(object):
        '''
            这是用来描述人的类
        '''
        def __call__(self):
            print('执行call')
    
    p = Person()
    p()

    # 执行call

    __dict__ 以字典的形式返回(类或对象)里的属性和方法

    class Person(object):
        '''
            这是用来描述人的类
        '''
        sex = 'man'
        def __init__(self, age):
            self.age = age
        def __call__(self):
            print('执行call')
    
    p = Person(18)
    print(Person.__dict__) # 输出类的属性和方法
    print(p.__dict__) # 输出实例的属性和方法
    
    {'__call__': <function Person.__call__ at 0x000002B0AA2CF840>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__module__': '__main__', 'sex': 'man', '__doc__': '
    		这是用来描述人的类
    	', '__dict__': <attribute '__dict__' of 'Person' objects>, '__init__': <function Person.__init__ at 0x000002B0AA2CF7B8>}                                   
    {'age': 18}  

    __str__ 定义打印打印对象时,打印的内容

    class Person(object):
        '''
            这是用来描述人的类
        '''
        def __str__(self):
            return 'skr'
    
    p = Person()
    print(p) # skr

    __getitem__、__setitem__、__delitem__ 用于索引操作,分别表示获取、设置、删除数据

    class Person(object):
        '''
            这是用来描述人的类
        '''
        def __getitem__(self, key):
            print('get %s' % key)
        def __setitem__(self, key, value):
            print('set %s is %s' % (key, value))
        def __delitem__(self, key):
            print('delete %s' % key)
    
    p = Person()
    p['age']
    p['name'] = 'Allen'
    del p['sex']

    get age
    set name is Allen
    delete sex

     __new__ 用来创建实例

    属性__metaclass__可以用来设置该类由谁实例化创建。

    class Person(object):
        '''
            这是用来描述人的类
        '''
        def __new__(cls, *args, **kwargs):
            print('skr')
        def __init__(self):
            print('666')
    
    p = Person() # skr
    class Person(object):
        '''
            这是用来描述人的类
        '''
        def __new__(cls, *args, **kwargs):
            print('skr')
            return object.__new__(cls)
        def __init__(self):
            print('666')
    
    p = Person()
    
    # skr
    # 666

    说明在__new__里调用的__init__

    特殊方式创建类

    def func(self):
        print 'skr'
    
    Foo = type('Foo', (object,), {'func': func})

    类是由type类实例化产生。

  • 相关阅读:
    页面性能:如何系统地优化页面?
    为什么CSS动画比JavaScript高效?
    Code Review
    浏览器中的页面之CSS是如何影响到渲染流程的
    async / await
    手撸Promise
    Promise
    宏任务和微任务
    有点恶心,随手写点儿
    关于判断用户输入的是不是int类型,这次没有正则表达式
  • 原文地址:https://www.cnblogs.com/allenzhang-920/p/9410892.html
Copyright © 2011-2022 走看看