Python 面向对象 (补充) , 反射 , 内置函数
面向对象中内置函数
issubclass方法:
检查第一个参数是否是第二个参数的子子孙孙类
返回 : 是一个布尔值
class Base(object):
pass class Foo(Base):
pass class Bar(Foo):
pass print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的子子孙孙类
type: 方法
获取当前对象是由那个类创建
返回: 类的类型 , if判断是否等于某个类
class Foo(object):
pass obj = Foo() print(obj,type(obj)) # 获取当前对象有哪个类创建
if type(obj) == Foo:
print("由类Foo创建")
def func(*args):
Foo_count = 0
Base_count = 0
for el in args:
if type(el) == Foo:
Foo_count += 1
elif type(el) == Base:
Base_count += 1
return Foo_count,Base_count # ret = func(Base(),Base(),Foo(),Foo(),Foo())
# print(ret) v,i = func(Base(),Base(),Foo(),Foo(),Foo())
print(v,i)
例子
isinstance : 方法
检查第一个参数(对象) 是否是第二个参数(类及父类)的实例.
返回值: 布尔型
class Base(object):
pass class Foo(Base):
pass obj = Foo() print(isinstance(obj,Foo))
print(isinstance(obj,Base)) #
True
True
总结 : 给一个参数,判断对象是不是由某一个指定类创建, 用 type(obj) == Foo
给一个参数,判断对象是不是由某一个指定类或父类创建 , 用 isinstance(obj,Foo)
方法和函数
对象.xxx xxx就是方法
类.xxx xxx就是函数
xxx xxx就是函数
判断是函数还是方法 可以通过打印查看
打印显示的有 function 表示函数
打印显示的有 method 表示方法
from types import FunctionType,MethodType def check(args):
"""
检查args是函数还是方法
:param args:
:return:
"""
if isinstance(args,FunctionType):
print("是函数")
elif isinstance(args,MethodType):
print("是方法")
else:
print("是其他") check(参数)
代码检查
反射
getattr # 根据字符串的形式,去对象中找成员. 第一个参数是(模块或对象或类), 第二个参数是(用户输入或值)
hasattr # 根据字符串的形式 , 去判断对象中是否有成员
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()
示例类或对象
setattr # 根据字符串的形式 , 动态的设置一个成员(在内存中) (三个参数, 第一个参数是 要设置的变量, 第三个变量是要设置的值)
delattr # 根据字符串的形式 , 动态的删除一个成员(在内存中) 语法 :
class Foo(object):
def __init__(self,a1):
self.a1 = a1
self.a2 = None
obj = Foo(1)
v1 = getattr(obj,'a1')
print(v1)
setattr(obj,'a2',2)
v2 = getattr(obj,'a2')
print(v2)
示例
callable 判断 名() 是否可以执行
返回值 : bool类型
只有 类 , 对象 , 函数 , 方法, 后面加 () 可以被调用
def func():
pass class Foo(object): def __call__(self, *args, **kwargs):
pass def fun(self):
pass obj = Foo() print(callable(func))
print(callable(Foo))
print(callable(obj))
print(callable(obj.fun))
示例
Python 面向对象 (补充) , 反射 , 内置函数的更多相关文章
- python面向对象--类的内置函数
#isinstance(obj,cls)判断obj是否是类cls的实例 #issubclass(cls,cls1)判断cls是否是cls1的子类或派生类 class Foo: pass class B ...
- python 类(object)的内置函数
python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...
- Python标准库:内置函数hasattr(object, name)
Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...
- python字符串——"奇葩“的内置函数
一.前言 python编程语言里的字符串与我们初期所学的c语言内的字符串还是有一定不同的,比如python字符串里的内置函数就比语言的要多得多:字符串内的书写格式也会有一点差异,例:字符串内含有引 ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...
- Python开发基础-Day11内置函数补充、匿名函数、递归函数
内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: divmod(a, b) #a.b为数字,a为除数,b ...
- python---issubclass/type/isinstance/ 反射(内置函数getattr/delattr...)
# 一 python面向对象-内置函数(issubclass(), type(), isinstance()) # issubclass 判断xxxx类是否是xxxx类的子类 class egg: p ...
- python基础之反射内置方法元类
补充内置函数 isinstance(obj,Foo) # 判断obj是不是foo的实例 issubclass() # 判断一个类是不是另一个类的子类 反射 什么是反射? 通过字符串来操作 ...
- Python学习日记(十一) 内置函数
什么是内置函数? 就是Python中已经写好了的函数,可以直接使用 内置函数图表: 以3.6.2为例 内置函数分类: 一.反射相关 1.hasattr() 2.getattr() 3.setattr( ...
随机推荐
- elementUI表格合并单元格
相信你肯定看了 ElementUI 官方文档了,没看的话先去看下表格各个属性的意义,方便下文阅读:传送门 但你会发现此例过于简单,死数据,但我们开发的时候往往都是后台传递过来的数据,导致我们 rows ...
- MongoCola使用教程 1 - MongoDB的基本操作和聚合功能---Mongdb客户端软件操作说明
前言 在开始正文之前,感谢博客园的Nosql爱好者对于MongoCola工具的试用(使用).特别感谢 呆呆 这位朋友的Bug报告,让我纠正了一个很严重的Bug.同时也感谢以前的多个网友在博客留言中给我 ...
- Java并发编程之CountDownLatch
一.场景描述 在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景 例如:百米赛跑,十名运动员同时起跑,由于速度的快慢,肯定有先到达和后到达的,而终点有个统计成绩的仪器,当所有选手到达终点时 ...
- Kivy: Building GUI and Mobile apps with Python
Intro Python library for building gui apps (think qt, gdk,processing) build from ground up for lates ...
- linux 系统统计目录下文件夹的大小
du -ah --max-depth=1 这个是我想要的结果 a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度. du命令用来查看 ...
- gcc编译 汇编 选项
gcc生成main.out的步骤分解:<blockquote>main.c-----(-S 编译)-------->main.s-------(-c 汇编)------->ma ...
- Java中数据库连接池原理机制的详细讲解(转)
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池 (Resource Pool).该模 ...
- 什么是 DDoS 攻击?
欢迎访问网易云社区,了解更多网易技术产品运营经验. 全称Distributed Denial of Service,中文意思为“分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致 ...
- ArcGIS_Server的安装
1.双击ArcGIS_for_Server_Windows_103_142101.exe 2.下一步 3.关闭 4.Win10系统弹出询问框是否更改程序,点击“”是“” 5.开始安装程序,点击next ...
- emqtt 1 (初初初初稿)
第一篇,先简单分析一下整个emqtt 的大致结构,包括两个部分: 1.message packet 类型 2.message 流向 message packet 类型 P1:mqtt_packet 的 ...