其他相关
一、isinstance(obj, cls)
检查是否obj是否是类 cls 的对象,检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
class Base(object): pass class Foo(Base): pass obj1 = Foo() print(isinstance(obj1, Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 print(isinstance(obj1, Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 obj2 = Base() print(isinstance(obj2, Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 print(isinstance(obj2, Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
二、issubclass(sub, super)
检查sub类是否是 super 类的派生类
class Base(object):
pass
class Foo(Base):
pass
class Bar(Foo):
pass
print(issubclass(Bar, Base)) # 检查第一个参数是否是第二个参数的子子孙孙类
三、type:获取当前对象是由哪个类创建
class Foo(object): pass obj = Foo() print(obj, type(obj)) # 获取当前对象是由那个类创建。 if type(obj) == Foo: print('obj是Foo类型')
四、方法和函数
称谓:
类,方法
外,函数
到底方法函数?
对象.xxx --> xxx就是方法
类.xxx --> xxx就是函数
xxx --> xxx就是函数
打印查看:
function
method
from types import MethodType,FunctionType def check(arg): """ 检查arg是方法还是函数? :param arg: :return: """ if isinstance(arg,MethodType): print('arg是一个方法') elif isinstance(arg,FunctionType): print('arg是一个函数') else: print('不知道是什么')
五、反射
a. 需求
总结:
v = getattr(obj,"func") # 根据字符串为参数(第二个参数),去对象(第一个参数)中寻找与之同名的成员。
练习题:
..
好记:
getattr # 根据字符串的形式,去对象中找成员。
hasattr # 根据字符串的形式,去判断对象中是否有成员。
setattr # 根据字符串的形式,动态的设置一个成员(内存)
delattr # 根据字符串的形式,动态的删除一个成员(内存)
应用一:
# by luffycity.com
from types import FunctionType
import handler
while True:
print("""
系统支持的函数有:
1. f1
2. f2
3. f3
4. f4
5. f5
""")
val = input("请输入要执行的函数:") # val = "f1"
# 错误
# handler.val()
if hasattr(handler,val):
func_or_val = getattr(handler,val) # 根据字符串为参数,去模块中寻找与之同名的成员。
if isinstance(func_or_val,FunctionType):
func_or_val()
else:
print(func_or_val)
else:
print('handler中不存在输入的属性名')
# 正确方式
"""
if val == 'f1':
handler.f1()
elif val == 'f2':
handler.f2()
elif val == 'f3':
handler.f3()
elif val == 'f4':
handler.f4()
elif val == 'f5':
handler.f5()
"""
应用二:
class Account(object):
func_list = ['login', 'logout', 'register']
def login(self):
"""
登录
:return:
"""
print('登录111')
def logout(self):
"""
注销
:return:
"""
print('注销111')
def register(self):
"""
注册
:return:
"""
print('注册111')
def run(self):
"""
主代码
:return:
"""
print("""
请输入要执行的功能:
1. 登录
2. 注销
3. 注册
""")
choice = int(input('请输入要执行的序号:'))
func_name = Account.func_list[choice-1]
# func = getattr(Account,func_name) # Account.login
# func(self)
func = getattr(self, func_name) # self.login
func()
obj1 = Account()
obj1.run()
obj2 = Account()
obj2.run()