反射-isinstance()-issubclass()-dir-callable

一.反射。

二.isinstance()函数

三.type()函数。

四.issubclass()函数。

一.反射

 反射一共就四个函数:

getattr(object,name)
从xxx对象中获取到xxx属性值
hasattr(object,name)
判断xxx对象中是否有xxx属性值
delattr(object,name)
从xxx对象中删除xxx属性
setattr(object,name,value)
设置xxx对象中的xxx属性为xxxx值

attr的全称是 attribute 属性的意思

 

# 对于模块而言可以使用getattr, hasattr, 同样对于我们的对象也可以执行类似的操作
class Person:
    def __init__(self, name, laopo):
        self.name = name
        self.laopo = laopo
p = Person("宝宝", "林志玲")
print(hasattr(p, "laopo")) #
print(getattr(p, "laopo")) # p.laopo
setattr(p, "laopo", "胡一菲") # p.laopo = 胡一菲
setattr(p, "money", 100000000000) # p.money = 100000000
print(p.laopo)
print(p.money)

delattr(p, "laopo") # 把对象中的xxx属性移除.  != p.laopo = None
print(p.laopo)

二.isinstance()函数.

isinstance: 判断你给对象是否是x类里的. (向上判断,不考虑继承关系)

 

三.type()函数.

返回xxx对象的数据类型(精确到上一层)

四.issubclass()函数.

只能向下判断.(考虑继承关系)

 

 

五.其他零星补充:

如何判断是方法还是函数:

 

from types import FunctionType, MethodType # 方法和函数
from collections import Iterable, Iterator # 迭代器

class Person:
    def chi(self): # 实例方法
        print("我要吃鱼")
    @classmethod
    def he(cls):
        print("我是类方法")
    @staticmethod
    def pi():
        print("泥溪镇地皮")
p
= Person() print(isinstance(Person.chi, FunctionType)) # True print(isinstance(p.chi, MethodType)) # True print(isinstance(p.he, MethodType)) # True print(isinstance(Person.he, MethodType)) # True print(isinstance(p.pi, FunctionType)) # True print(isinstance(Person.pi, FunctionType)) # True
callable(obj)检测该参数是否可调用.

对象是否可被调用,看类中是否定义了__all__方法,有就可以,没有就不可以

dir(obj)查看x对象中的所有内容(方法,函数,内置函数)

函数和方法如何区分:(FunctionType,MethodType)

from types import FunctionType, MethodType
class Car(object):
    def __init__(self):
        pass
    def run(self):
        print("my car can run!")
    @staticmethod
    def fly(self):
        print("my car can fly!")
    @classmethod
    def jumk(cls):
        print("my car can jumk!")

c = Car()
print(isinstance(c.run,MethodType)) # True
print(isinstance(Car.run,FunctionType)) #True

 

 

 

 

类__反射(相关练习)

posted @ 2018-12-20 20:43  Tank-Li  阅读(265)  评论(0编辑  收藏  举报