• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
蓝冰蝶
博客园    首页    新随笔    联系   管理    订阅  订阅
面向对象【进击篇】

其他相关

一、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()
posted on 2018-08-30 15:05  蓝冰蝶  阅读(107)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3