• 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中
  • 相关阅读:
    【幻化万千戏红尘】qianfengDay03-java基础学习:for循环,switch,if
    Hexo | 博客文章链接优化之abbrlink
    Hexo 集成 Gitalk 评论系统
    Linux对一个目录及其子目录所有文件添加权限
    PhpStorm配置使用phpunit单元测试
    php根据当前定位经纬度排序
    mysql根据当前定位经纬度排序
    linux压缩和解压缩命令
    PHP常见数学函数及BC高精度数学函数用法示例
    vagrant package 打包自己的box镜像
  • 原文地址:https://www.cnblogs.com/Guishuzhe/p/9824923.html
Copyright © 2020-2023  润新知