zoukankan      html  css  js  c++  java
  • python基础之Day24

    1.补充内置函数

    2.反射

    什么是?

    通过字符串操作类或者对象的属性

    hasattri(a,"b")  判断能否访问到a.b

    setattri(a,"b",c)设置a.b=c

    3.自定义内置方法定制类的功能

     对象被打印时自动触发__str__

    __del__用在回收应用程序对象时候顺便把占的操作系统的资源也回收

    4.元类

    什么是?

    py中一切皆对象,用class 关键字定义的类本身也是对象,负责产生该对象的类为元类

    为何用?

    元类负责产生类的,所以学习元类或者自定义元类的目的是控制类的产生过程,还可以控制对象的产生过程

    如何用?

    exec 的用法:

    将字符串中的代码提取出来运行,运行字符串内的代码

    创建类的三要素:

    类名,基类,类的名称空间

    class_name="people"

    class_bases=(object,)  元组

    class_dic={}

    class_body='''   '''

    exec(class_body,{},class_dic)

    people=type(class_name,class_bases,class_dic)

    创建类的两种方法:

    1.用的class关键字创建,默认元类是type

    如果类也是对象的话,该过程也是实例化

    2.用自定义的元类

    class Mymeta:

        pass

    class people(object,metaclass=Mymeta):

      pass

    分析自定义类的原理,非元类的原理

        1.拿到字符串格式的类名 "people"

        2.拿到类的基类们__bases__(object,)

        3.执行类体代码,拿到名称空间 class_dic={}

        4.调用people=type(class_bases,class_bases,class_dic)

    class mymate(type)  只有继承了type才是元类,否则是个普通的自定义类

    自定义元类控制类的产生过程,类的产生过程其实就是元类的调用过程,即类的实例化过程

    class Foo()

    pass

    obj=Foo()

    obj()

    对象的类中定义__call__

    要想调用obj,必须控制Foo(元类)中的call方法

    把类也看成对象,也需要call方法

    调用

    自定义类的实例化过程

             1.在mymeta里面先造people的空对象obj= self.__new__(self)    #括号里传self,就是people

                 __new__的顺序:查找从people找到mymeta再到type

             2.初始化独有的属性 self.__init__(obj.*args,**kwargs)  调用people是调用call方法 3.return obj  #返回初始化好的对象

  • 相关阅读:
    SQL Server 隐式转换引发的死锁
    C# List按某对象的属性分组 IGrouping
    C# 正则表达式获取json字符串中的键值
    .NET程序修改 ConfigurationManager 后,不需要重启IIS也可刷新Web.config配置文件
    相同结构的多个表合并到一个表的实现方法
    WCF系列_WCF影响客户端导出Excel文件的实现
    WCF系列_WCF如何选择不同的绑定
    WCF系列_WCF常用绑定选择
    JS生成URL二维码
    win 常用CMD命令备忘
  • 原文地址:https://www.cnblogs.com/chicokiko/p/9243446.html
Copyright © 2011-2022 走看看