一丶,isinstance/issubclass/type

  1.issubclass检查第一个参数是否是第二个参数的 子子孙孙类

class Foo():
pass
class Boo(Foo):
pass
class Aoo(Boo):
pass
print(issubclass(Boo,Foo)) #True
print(issubclass(Aoo,Foo)) #True

  2.type获取当前对象是由那个类创建。

class Foo(object):
pass obj = Foo() print(obj,type(obj)) #<__main__.Foo object at 0x000001B58F579D68> <class '__main__.Foo'>
if type(obj) == Foo:
print('obj是Foo类型') #obj是Foo类型

  type练习

class Foo(object):
pass class Bar(object):
pass def func(*args):
foo_counter =0
bar_counter =0
for item in args:
if type(item) == Foo:
foo_counter += 1
elif type(item) == Bar:
bar_counter += 1
return foo_counter,bar_counter result = func(Foo(),Bar(),Foo())
print(result) #(2, 1) v1,v2 = func(Foo(),Bar(),Foo())
print(v1,v2) #2 1

type练习

  3.isinstance,检查第一个参数(对象)是否是第二个参数(类及父类)的实例。

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)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。

 

二丶方法和函数

  称谓:

    类,方法

    外,函数

  到底什么是方法,什么是函数?

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

    类.xxx    ---> xxx就是函数

    xxx  --->  xxx就是函数

  打印查看:

    function

    method

代码演示:

from types import MethodType,FunctionType
class Foo:
def display(self):
pass
def check(arg):
"""
检查arg是方法还是函数?
:param arg:
:return:
"""
if isinstance(arg,MethodType):
print('arg是一个方法')
elif isinstance(arg,FunctionType):
print('arg是一个函数') else:
print('不知道是什么')
check(check) #arg是一个函数
obj = Foo()
check(obj.display) #arg是一个方法

三丶反射

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

class Foo(object):

    country = "中国"

    def func(self):
pass
v = getattr(Foo,'func') # Foo.func # 根据字符串为参数,去类中寻找与之同名的成员。
print(v) #<function Foo.func at 0x000001E1A557D8C8> obj = Foo()
v = getattr(obj,"func") # obj.func # 根据字符串为参数,去对象中寻找与之同名的成员。
print(v) #<bound method Foo.func of <__main__.Foo object at 0x000001E1A5579F28>>

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

a = 123
class Foo(object):
country = "中国"
def func(self):
pass
v2 = hasattr(Foo,"a") #判断Foo中是否有a成员
v3 = hasattr(Foo,'country') #判断Foo中是否有country成员
v4 = hasattr(Foo,"func") #判断Foo中是否有func成员
v5 = hasattr(Foo,'xxxxxxx') print(v2,v3,v4,v5) # False True True False

  3.setattr : 根据字符串的形式,动态的设置一个成员(内存)

# 根据字符串的形式,动态的设置一个成员(内存)
x1 = 123
class Foo:
def f1(arg):
print(arg,666) setattr(Foo,'x2',999)
v1 = getattr(Foo,'x2')
print(v1) #

  4.根据字符串的形式,动态的删除一个成员(内存)

x1 = 123
class Foo:
def f1(arg):
print(arg,666)
delattr(Foo,'x1')
v9 = getattr(Foo,'x1')
print(v9)

  应用

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(self, func_name) # self.login
func() obj1 = Account()
obj1.run() obj2 = Account()
obj2.run()

应用

四丶callable 判断是否可以调用

def func():
pass class Foo(object):
def __call__(self, *args, **kwargs):
pass
def func(self):
pass
obj = Foo() print(callable(func))
print(callable(Foo))
print(callable(obj))
print(callable(obj.func))

方法和函数,isinstance/issubclass/type以及反射的更多相关文章

  1. 面向对象中特殊方法的补充、isinstance/issubclass/type、方法和函数、反射

    一.面向对象中特殊方法的补充 1.__str__ 能将对象名改成你想要的字符串,但是类型还是类 class Foo(object): def __init__(self): pass def func ...

  2. isinstance/issubclass/type的区别?

    type() 判断某个对象是否是该类创建的,只看一层,如果是继承类,也不会考虑继承类的类型.. Issubclass() 判断该类是否是另一个类的派生类,也就是子类,参数为类. isinstance( ...

  3. 反射 方法和函数 type

    1. isinstance/issubclass/type  *** issubclass 判断xxx类是否是xxx类的子类 class Animal: pass class Cat(Animal): ...

  4. day 25 方法和函数 反射

    特殊成员的补充: # __str__ class Foo(object): def __init__(self): pass def func(self): pass def __str__(self ...

  5. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  6. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  7. issubclass/type/isinstance、函数和方法、反射、callable、特殊成员补充

    一.issubclass/type/isinstance(***) 1.issubclass(参数1, 参数2):检查第一个参数是否是第二个参数的 子子孙孙类,如下示例: class Base(obj ...

  8. python isinstance和issubclass,区分方法和函数,反射

    一.isinstance和issubclass 1.isinstance class Animal: def eat(self): print('刚睡醒吃点儿东西') class Cat(Animal ...

  9. python之反射机制与callattr()、issubclass()、isinstance、type()相关

    一.反射机制 * 反射可以理解为 通过字符串的形式,动态导入模块: 利用字符串的形式,在对象(模块)中操作(查找/获取/删除/添加)成员,是一种基于字符串的事件驱动! 反射机制的内置函数 # hasa ...

随机推荐

  1. nodejs PK php全方位比较PHP的Node.js的优缺点

    全方位比较PHP的Node.js的优缺点 http://www.techug.com/php-vs-node-js

  2. unreal3启动流程总结

    一.启动代码所在工程为Launch(win32),可为所有同一codebase项目共享. 但共享方式很不智能,是通过在源文件中添加大量#if/else条件编译宏来实现,即各项目在自己的工程中添加[程序 ...

  3. cookie 、Session 和自定义分页

    cookie cookie的由来 大家都知道Http协议是无状态的. 无状态的意思 是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系, 他不会受前面的请求响应情况直接影响, ...

  4. RDS mysql 与ECS自建mysql做主从备份

    由于公司要组建一个数据中心,简而言之就是把各个地方的数据都同步到一个地方,做BI建模和数据分析. 一般来说这种需求是由hadoop来实现的,但由于预算不够..所以,来个low点的办法吧 以下主要是讲r ...

  5. python之02数据类型学习-作业练习

    题目: 购物车程序 salary = 5000 1. iphone6s 5800 2. mac book 9000 3. coffee 32 4. python book 80 5. bicyle 1 ...

  6. struts2学习笔记——第一个struts2应用配置

    说实在的,随着Java学习的不断深入,特别是Java web框架部分,调bug让人很心累,但是每征服一个bug,内心的成就感也是难以言说的.第一个struts2应用的配置,我昨天折腾了快2个小时,最后 ...

  7. 【转载】【爬坑记录】hyperledger caliper 性能测试工具使用的一些问题记录

    原文: https://blog.csdn.net/raogeeg/article/details/82752613 安装方法详见:https://github.com/hyperledger/cal ...

  8. Jmeter如何提取响应头部的JSESSIONID【转】

    一.测试前准备 1.测试地址: 登录:http://XXXX:8080/futureloan/mvc/api/member/login 充值:http://XXXX:8080/futureloan/m ...

  9. linux笔记之基础 1

    内核命名规则: R.X.Y-Z   2.6.32-642 R: 内核有重大改变时才会更改,目前为止有四个大版本更新. X:基数为开发版,偶数为稳定版. Y.Z:修复bug,实现新功能,新特性的时候更改 ...

  10. Ext3.1的一些使用讨论

    这里简单记录一下曾经的10个月使用Ext的工作模式. 前公司用的是 Ext 3.1,在2018/2019的今天,可以说是比较久远的技术了.处于大前端发展时代的我们,对其的诟病应该不少. 不过其中面向对 ...