方法和函数,isinstance/issubclass/type以及反射
一丶,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以及反射的更多相关文章
- 面向对象中特殊方法的补充、isinstance/issubclass/type、方法和函数、反射
一.面向对象中特殊方法的补充 1.__str__ 能将对象名改成你想要的字符串,但是类型还是类 class Foo(object): def __init__(self): pass def func ...
- isinstance/issubclass/type的区别?
type() 判断某个对象是否是该类创建的,只看一层,如果是继承类,也不会考虑继承类的类型.. Issubclass() 判断该类是否是另一个类的派生类,也就是子类,参数为类. isinstance( ...
- 反射 方法和函数 type
1. isinstance/issubclass/type *** issubclass 判断xxx类是否是xxx类的子类 class Animal: pass class Cat(Animal): ...
- day 25 方法和函数 反射
特殊成员的补充: # __str__ class Foo(object): def __init__(self): pass def func(self): pass def __str__(self ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass
https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...
- issubclass/type/isinstance、函数和方法、反射、callable、特殊成员补充
一.issubclass/type/isinstance(***) 1.issubclass(参数1, 参数2):检查第一个参数是否是第二个参数的 子子孙孙类,如下示例: class Base(obj ...
- python isinstance和issubclass,区分方法和函数,反射
一.isinstance和issubclass 1.isinstance class Animal: def eat(self): print('刚睡醒吃点儿东西') class Cat(Animal ...
- python之反射机制与callattr()、issubclass()、isinstance、type()相关
一.反射机制 * 反射可以理解为 通过字符串的形式,动态导入模块: 利用字符串的形式,在对象(模块)中操作(查找/获取/删除/添加)成员,是一种基于字符串的事件驱动! 反射机制的内置函数 # hasa ...
随机推荐
- 使用JFileChooser打开文件
-----------------siwuxie095 工程名:TestFileChooser 包名:com.siwuxie095.fi ...
- python变量、类型、运算、输出
1.变量.类型.运算.输出等 # -*- coding: utf-8 -*- a=2 b=3 c=a+b print u'结果是=%i'%c #加u显示中文 str=unicode(s,"u ...
- 判断Java对象死亡的两种常用算法
当对象不馁引用的时候,这个对象就是死亡的,等待GC进行回收. 1.引用计数法 概念: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就增加1:当应用失效时,计数器值就减1:任何时刻计数器 ...
- PHP中空字符串、0、null、empty和false之间的关系
原文来自:http://www.seayee.net/article/info_115.html
- Docker小白使用笔记
本文来自网易云社区. 本人DBA一枚,但因为工作的关系,接手的机器越来越多,要部署的东西也从MySQL扩展到其他千奇百怪的各种应用服务,因此需要使用自动化部署的场景也越来越多.早就听运维部的其他大大们 ...
- Unity MMORPG游戏优化经验分享
https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...
- Ajax原生请求及Json基础
1.基本结构 <script type="text/javascript"> // 创建XMLHttpRequest对象 var request = new XMLHt ...
- 2017-10-5 清北刷题冲刺班a.m
行列式 序列 #include<iostream> #include<cstdio> #define maxn 500010 using namespace std; int ...
- bzoj4873: [Shoi2017]寿司餐厅(最小割)
传送门 大佬们是怎么一眼看出这是一个最大权闭合子图的……大佬好强->这里 1.把所有区间$(i,j)$看成一个点,如果权值大于0,则从$S$向他连边,容量为权值,否则从它向$T$连边,容量为权值 ...
- C++基本变量类型
算数类型表 类型 含义 最小存储空间 取值范围 bool 布尔型 – char 字符型 8位 -2^7 ~ 2^7-1 wchar_t 宽字符型 16位 short 短整型 16位 -2^15 ...