python - 类的特殊成员方法

作者: 廖马儿 | 来源:发表于2017-07-31 21:09 被阅读47次

    1)doc 表示类的描述信息

    class Dog(object):
        """
        这个类是狗类
        """
        def __init__(self, name, food):
            self.name = name
            self.food = food
    
    
    
    d = Dog('xiaoming', 'baozi')
    
    print(d.__doc__)
    # 打印结果
       这个类是狗类
    

    2)moduleclass
    __module__表示当前操作的对象的类是在哪个模块
    __class__表示当前操作的对象的类是什么

    3)init
    构造方法

    4)del
    析构方法

    5)call
    对象后面加括号,触发执行。
    注:构造方法的执行是由创建对象触发的。即:

    对象=类名()
    

    而对于__call__方法的执行是由对象后面加括号触发的,即:

    对象()  
    

    示例:

    class Dog(object):
        """
        这个类是狗类
        """
        def __init__(self, name, food):
            self.name = name
            self.food = food
    
        def __call__(self, *args, **kwargs):
            print('running call method', args, kwargs)
    
    d = Dog('xiaoming', 'baozi')
    d()
    d(1, 2, 3, name = "xiaohong")
    
    

    6)dict
    查看类或者对象中的所有成员

    可以通过:

    类名.__dict__    # 打印类里面的所有属性,不包括示例属性
    实例名.__dict__   # 打印示例所有睡醒,不包括类属性
    

    7)str()

    一般是自定义__str__()方法:

    class Dog(object):
        """
        这个类是狗类
        """
        def __init__(self, name, food):
            self.name = name
            self.food = food
    
        def __call__(self, *args, **kwargs):
            print('running call method', args, kwargs)
    
        def __str__(self):
            return """<
            name: %s
            food: %s
            >
            """ %(self.name, self.food)
    
    d = Dog('xiaoming', 'baozi')
    print(d.__str__())
    

    8)getitemsetitemdelitem
    大多数时间都没有什么用。

    9)newmetaclass

    在Python中一切皆对象,类也是对象。

    class Foo(object):
        def __init__(self, name):
            self.name = name
    
    f = Foo("Adoe")
    

    f是通过Foo类实例化化的对象。其实Foo类本身也是一个对象,因为python一切皆对象。

    class Foo(object):
        def __init__(self, name):
            self.name = name
    
    f = Foo("Adoe")
    
    print (type(f))  # <class '__main__.Foo'>
    print (type(Foo))  # <class 'type'>   Foo就是来自于type
    
    
    图片.png

    类是由type类实例化而来的。
    type是由python解释器自己实现的。
    类中有一个属性__metaclass__

    new是新式类中自带的,我们进入object里面源代码可以看到。

     @staticmethod # known case of __new__
        def __new__(cls, *more): # known special case of object.__new__
            """ Create and return a new object.  See help(type) for accurate signature. """
            pass
    

    我们可以重写new方法。
    new在实例化的时候也可以自动执行,而且是在init之前。

    初始化实例的时候,是首先经过new然后才(new里面)调用init的。

    重写new()方法:

    class Foo(object):
        def __init__(self, name):
            self.name = name
    
        def __new__(cls, *args, **kwargs):
            print("==new==")
            return object.__new__(cls)   # 注意:这个cls就是Foo类,是一个类对象
    
    f = Foo("Adoe")
    
    print(f.name)
    

    相关文章

      网友评论

        本文标题:python - 类的特殊成员方法

        本文链接:https://www.haomeiwen.com/subject/jzerlxtx.html