反射 19

反射 19

 一  issubclass , type , isinstance 

  1.issubclass 判断xxx类是否是xxxx类的子类

class Base:
    pass
class Foo(Base):
    pass
class Bar(Foo):
    pass
print(issubclass(Bar,Foo)) # True  判断Bar是不是Foo的子类 前者继承后者,是
print(issubclass(Foo,Bar)) # False  前者被后者继承 返回值是False
print(issubclass(Bar,Base)) # True 前者继承 继承的继承 因此是True

  2.type 给出 xxx 的数据类型  比较精准的给出对象的类

  type type(obj) 表示查看obj是由哪个类创建的

class Foo:
    pass
obj = Foo()
print(obj,type(obj)) #<__main__.Foo object at 0x00000289C760D198> <class '__main__.Foo'>

前边的表示由Foo创建的一个具体的对象所在的内存地址  后者表示obj 属于Foo类.(给出创建这个对象的类可以精准判断,这点有别于isinstance)

3.isinstance  迭代器  判断xxx对象是否是xxxx类型的   子类的对象可以当成父类的类型 (不能往下判断 即父类对象当成子类的类型)

class Base:
    pass
class Foo(Base):
    pass
class Bar(Foo):
    pass
print(isinstance(Foo(),Foo)) # True 自己属于自己的类型
print(isinstance(Foo(),Base)) # True 继承了Base 因此属于Base类型
print(isinstance(Foo(),Bar)) # False 不能往下判断

# 实例方法: 对象.方法   方法   类名.方法

二 区分函数和方法(不太重要):

  在外面定义的函数一定是函数

  在类中:

     1.实例方法: 如果是对象访问 那么就是方法 如果是类访问 , 那么就是函数

     2. 静态方法 : 都是函数

     3. 类方法 : 都是方法

  如果想要用程序来判断. 需要引入两个模块 

    from types import FunctionType , MethodType

    isinstance(obj , FunctionType)  返回True 或者False

三 反射(重点)

  正常是先引入模块,然后去访问模块里的内容,现在反了 手动输入要运行的功能,反着去模块里找,这个就是反射.

  仅限于内存层面   并不会影响源代码 如果想改,可以使用文件操作进行修改

  hasattr(obj,str) 判断对象中是否包含了 xxx(str)

  getattr(obj,str) 从对象中获取xxxx(str)

  

  setattr(obj,str,value) 给对象设置xxx(str)属性值(value)

  delattr(obj,str) 从对象中删除xxxx(str)信息

 

      

 

 

 

  

posted @ 2018-09-28 22:00 你没有想象的那么重要 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值