• day24 反射/定制__str__方法控制对象的打印格式/定制__del__方法回收系统资源/元类介绍以及默认元类type创造类的过程/自定义元类控制类的创建过程/自定义元类控制类的调用过程


    补充内置函数

    1.isinstance判断是否是 foo这个类的实例,也可以用来判断数据类型

    class foo:
        pass
    obj=foo()
    print(isinstance(obj,foo))
    
    d={'x':1}
    print(isinstance(d,dict))
    

    2.issubclass判断是不是他的子类

    class parent:
        pass
    
    class sub(parent):
        pass
    
    print(issubclass(sub,parent))  #判断sub是不是parent的子类
    print(issubclass(parent,object)) #判断parent是不是object的子类
    

    反射

    class people:
        country="china"
        def __init__(self,name):
            self.name=name
    
        def eat(self):
            print('%s is eating'%self.name)
    
    peo1=people('egon')
    
    #操作属性
    print(people.country)#表示访问
    peo1.name=1 #表示赋值
    # del peo1.name#表示删除
    print(peo1.__dict__)
    print(peo1.country)
    print(people.__dict__)
    

    1、什么是反射

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

    2、如何用

      hasattr,getattr,setattr,delattr

    class people:
        country="china"
        def __init__(self,name):
            self.name=name
    
        def eat(self):
            print('%s is eating'%self.name)
    
    peo1=people('egon')
    
    #操作属性
    print(people.country)#表示访问
    peo1.name=1 #表示赋值
    # del peo1.name#表示删除
    print(peo1.__dict__)
    print(peo1.country)
    print(people.__dict__)
    
    print(hasattr(peo1,'xxx'))#'xxx in peo1.__dict__ 判断peo1是否有这个属性
    print(getattr(peo1,'xxxx','没有哇'))
    setattr(peo1,'age',18)#peo1.age=18 设置
    
    
    delattr(peo1,'name')
    print(peo1.__dict__)
    delattr(peo1,'name')
    
    class ftp:
        def __init__(self,ip,port):
            self.ip=ip
            self.port=port
    
        def get(self):
            print('get function')
    
        def put(self):
            print('put function')
    
        def run(self):
            while True:
                choice=input('>>请输入相关数据').strip()
            #     print(choice,type(choice))
            #     if hasattr(self,choice):
            #         method=getattr(self,choice)
            #         method()
            #     else:
            #         print('输入的名字不存在')
                method=getattr(self,choice,None)
                if method is None:
                    print('输入的命令不存在')
                else:
                    method()
    
    conn=ftp('1.1.1.1',23)
    conn.run()
    

    内置的方法 满足某种条件下自动触发从而实现某种功能

    定制__str__方法控制对象的打印格式

    class people:
        def __init__(self,name,age): #杠杠开头杠杠结尾都是满足某种条件下自动触发
            self.name=name
            self.age=age
    
        #在对象self被打印时,自动触发,应该在该方法内
        def __str__(self):
            print('ok',self)
            # return '我草尼玛沐风'
    
    obj=people('egon',18)
    print(obj)
    
    1、什么是元类
    在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象
    负责产生该对象的类称之为元类,即元类可以简称为类的类
    class Foo: # Foo=元类()
    pass
    2、为何要用元类
    元类是负责产生类的,所以我们学习元类或者自定义元类的目的
    是为了控制类的产生过程,还可以控制对象的产生过程


    3、如何用元类
  • 相关阅读:
    【C#】工具类-FTP操作封装类FTPHelper
    网盘搜索网站
    在线服务
    Windows下安装NTP服务器
    vue 组件间的传值 + 路由守卫
    功能6 -- 选项卡数据缓存
    vue2.0/3.0
    vuex
    mySql笔记
    Typescript
  • 原文地址:https://www.cnblogs.com/wangmiaolu/p/9251623.html
Copyright © 2020-2023  润新知