Python全栈的知识点(3)

Python类:
1. 如果一类自己或基类中指定了metaclass,那么该类就是由metaclass指定的type或mytype创建。

2. metaclass作用是指定当前类由谁来创建。
    - 源码
        如果类以基类中未指定metaclass:
            - __new__
            - __init__
        如果类以基类中指定metaclass:
            - 创建类
                MyType.__init__    1.步生成类
            - 创建对象 
                MyType.__call__    2.步创建对象
                    - __new__  3.生成对象
                    - __init__

3. 类创建 
    a.- class Foo(object):pass             
    b.- Foo = type('Foo',(object,),{静态字段或者方法})
    c.- 执行自定义的mytype
        class Foo(metaclass=MyType):
            # __metaclass__ = MyType -->  python2
            pass 

4. 谈谈你对面向对象的认识?
    父类/子类  <-->  基类/派生类
     - 基础:谈面向对象就要从他的三大特性开始说起,如:封装、继承、多态。
    1.封装:
        a.功能封装,相同的功能封装到一个类
        b.数据封装,面向同一个类别(比如人),不同的数据也可以封装进类中
    2.继承
        a.有共同方法时,可把此方法封装到父类,避免重复编写(子类继承即可)
    3.多态(鸭子模型):Python原生支持多态
        a.对于参数来说可以传入任何类型的对象,只要保证有想要的相同方法(send)即可。
           def (*args): 
           args.send()

5. 进阶:
    __init__,初始化                __new__,创建对象
    __call__,对象()            __getattr__,对象.xx 
    __setattr__                __delattr__
    __setitem__,对象['xx']         __getitem__        __delitem__                
    __mro__,查找成员顺序            __enter__起始   <-->    __exit__结束 --》with语句
    __str__  返回字符串            __repr__    返回整洁形式    
    __iter__,迭代                __dict__,  返回字典数据类型
    __add__,一个对象加一个对象

6. 令你印象深刻的事(好神奇)。
    obj._Foo__name      可以获取当前类中私有属性。生成实例对象,调用_类__name

7. 类的约束:
    - 继承+抛出异常 (*class Base(object):
        def send(self):
        raise NotImplementedError('子类中必须实现send方法')
    import abc
    class Base(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def send(self):pass     ('子类中必须实现send方法')

8. classmethod,staticmethod,property
         classmethod:类方法,将类的函数转换成类方法,函数上装饰@classmethod会将函数的自动传值参数改成cls。
         staticmethod:静态方法,此方法相当于给类扩展一个功能,将类内的函数实例化,给类或对象使用,此时类内的函数就是普通函数,不管是类还是实例化的对象都可以使用。
         property:实例化,类的实例化就会产生一个实例(对象),可以理解为类把虚拟的东西实例化,得到具体存在的值。

9. 经典类、新式类
         经典类遵循:深度优先,python2中
         新式类遵循:广度优先,Python3中

猜你喜欢

转载自www.cnblogs.com/Guishuzhe/p/9824923.html