zoukankan      html  css  js  c++  java
  • Python 反射-isinstance-issubclass-__str__-__del__

    用到的

    isinstance(对象,类)  -------------------  判断一个对象是否是一个类的实例

    issubclass(子类,父类)  ----------------  判断一个类是否是一个类的子类

    hasattr(对象,字符串属性)  ------------  判断一个属性在对象里有没有

    getattr(对象,属性,第三参数)  ---------  获取对象中的字符串属性  

    setattr(对象,属性,值)  ------------------  属性的赋值(设置值,修改值,新增值)

    delattr(删除的属性)  --------------------  删除属性操作

    __str__  ------------------------------------  在对象被打印时自动触发,可以用来定义对象被打印时的输出信息(必须返回一个字符串类型的值)

    __del__  -----------------------------------  在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源

    isinstance和issubclass例子

     1 class Bar:
     2     pass
     3 
     4 
     5 class Foo(Bar):
     6     pass
     7 
     8 
     9 obj = Foo()
    10 print(issubclass(Foo, Bar))
    >>>True
    11 print(isinstance(obj, Foo))
    >>>True

    反射例子

     1 class Ftp:
     2     def get(self):
     3         print('get')
     4 
     5     def put(self):
     6         print('put')
     7 
     8     def login(self):
     9         print('login')
    10 
    11     def run(self):
    12         while True:
    13             cmd = input('>>>: ').strip()  # cmd='get'
    14             if hasattr(self, cmd):
    15                 method = getattr(self, cmd)
    16                 method()
    17             else:
    18                 print('输入的方法不存在')
    19 
    20 
    21 obj = Ftp()
    22 obj.run()

    __str__例子

    在对象被打印时自动触发,可以用来定义对象被打印时的输出信息(注意: 必须返回一个字符串类型的值)

     1 class People:
     2     def __init__(self, name, age):
     3         self.name = name
     4         self.age = age
     5 
     6     def __str__(self):
     7         return '<name:%s age:%s>' % (self.name, self.age)
     8 
     9 
    10 obj = People('egon', 18)
    11 print(obj)  # print(obj.__str__())
    >>><name:egon age:18>

    __del__例子

    在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源

     1 class Foo:
     2     def __init__(self, x, filepath, encoding='utf-8'):
     3         self.x = x
     4         self.f = open(filepath, 'rt', encoding=encoding)
     5 
     6     def __del__(self):
     7         print('run.....')
     8         # 回收对象关联的其他资源
     9         self.f.close()
    10 
    11 
    12 obj = Foo(1, 'a.txt')
    13 print('主===========>')
    >>>主===========>
    >>>run.....
  • 相关阅读:
    Flutter开发环境搭建
    Android自定义View-圆形图片控件
    浅析对象的创建过程
    Java对象占用内存大小--Java对象的内存结构分析
    对AQS的简单理解及自定义锁的实现
    IntelliJ IDEA插件开发的简单流程
    IOC之运行时注入-实现Activity的布局注入+控件注入+事件绑定
    动态代理+注解+反射实现View的点击事件绑定
    Java中的注解和反射
    利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到微信
  • 原文地址:https://www.cnblogs.com/earon/p/9523006.html
Copyright © 2011-2022 走看看