面向对象4

1.issubclass/isinstance/type

  1.issubclass:

 1 class Base(object):
 2     pass
 3 
 4 class Foo(Base):
 5     pass
 6 
 7 class Bar(Foo):
 8     pass
 9 
10 print(issubclass(Foo,Base))
11 print(issubclass(Bar,Base))
12 #检查第一个参数是否是第二个参数的子类

2.isinstance

1 class Base(object):
2     pass
3 
4 class Foo(Base):
5     pass
6 
7 obj1 = Foo()
8 print(isinstance(obj1,Foo))#检查第一个参数(对象)是否是第二个参数(类及父类)的实例
9 print(isinstance(obj1,Base))#检查第一个参数(对象)是否是第二个参数(类及父类)的实例

3.type

1 class Foo(object):
2     pass
3 
4 obj = Foo()
5 
6 print(obj,type(obj))#获取当前对象是由哪个类创建
7 
8 if type(obj) == Foo:
9     print("obj是Foo类型")

总结:

给一个参数,判断这个类是不是有某一个指定类或其父类  issubclass

给一个参数,判断对象是不是有某一个指定类或其父类  isinstance

给一个参数,判断对象是不是有某一个指定类  type

2.方法和函数的检验

对象.xxx  -->xxx就是方法

类.xxx   -->xxx就是函数

xxx     -->xxx就是函数


代码查看:

扫描二维码关注公众号,回复: 3000153 查看本文章
 1 from types import MethodType,FunctionType
 2 
 3 def check(arg):
 4     """
 5     检查arg是方法还是函数
 6     """
 7     if isinstance(arg,MethodType):
 8         print("arg是一个方法")
 9     elif isinstance(arg,FunctionType):
10         print("arg"是一个函数)
11     else:
12         print("其他")

3.反射

  1.反射--模块

  handler.py:

 1 def f1():
 2     print("F1")
 3 def f2():
 4     print("F2")
 5 def f3():
 6     print("F3")
 7 def f4():
 8     print("F4")
 9 def f5():
10     print("F5")
 1 import handler
 2 
 3 while True:
 4     print("""
 5     系统支持的函数有:
 6     1.f1
 7     2.f2
 8     3.f3
 9     4.f4
10     5.f5
11 """)
12     val = input("请输入要执行的函数:")
13     if hasattr(handler,val):
14         func_val = getattr(handler,val)#根据字符串为参数,去模块中寻找与之同名的成员
15         if isinstance(func_val):
16             func_val()
17         else:
18             print(func_val)
19     else:
20         print("handler中不存在输入的属性名")

2.反射--面向对象

1 class Foo:
2     a = 1
3     def func(self):
4         pass
5 
6 v = getattr(Foo,'func')#根据字符串为参数,去类中寻找与之同名的成员
7 print(v)

getattr  根据字符串的形式,去对象中找成员

hasattr  根据字符串的形式,去判断对象中是否有成员

setattr  根据字符串的形式,动态的设置一个成员

delattr  根据字符串的形式,动态的删除一个成员

4.是否可以被调用

 1 def func():
 2     pass
 3 
 4 class Foo(object):
 5     def __call__(self,*args,**kwargs):
 6         pass
 7 
 8     def func(self):
 9         pass
10 
11 obj = Foo()
12 
13 print(callable(func))#True
14 print(callable(Foo))#True
15 print(callable(obj))#True
16 print(callable(obj.func))#True

猜你喜欢

转载自www.cnblogs.com/s593941/p/9570815.html