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( ...
随机推荐
- MySQL备份与恢复实战案例及生产方案
按天备份 按周备份 mysql的mysqldump备份什么时候能派上用场1,迁移或者升级数据库时2,增加从库的时候3,如果因为硬件或特殊情况,主库或者从库宕机,主从可以互相切换,无需备份4,人为的DD ...
- 【spark】常用转换操作:sortByKey()和sortBy()
1.sortByKey() 功能: 返回一个根据键排序的RDD 示例 val list = List(("a",3),("b",2),("c" ...
- html5新增语义化标签
注意:body.section.nav 需要h1-h6. div.header则不需要. 1):<article> 显示一个独立的文章内容. 例如一篇完整的论坛帖子,一则网站新闻,一篇博客 ...
- poi自定义颜色设置(转)
原文链接 http://javapolo.iteye.com/blog/1604501 最近在项目的开发中使用到了apache poi,该组件可以让我们方便的操作excell,该工具非常容易上手,但 ...
- react use simditor
1.install simditor 2.import simditor && scss import $ from "jquery" import Simdito ...
- .Net版SQLite无法访问网络位置的数据库文件-winOpen,os_win.c 36702异常
最近一个C#小程序,希望将SQLite数据库放在网络共享的位置,让多个客户端同时访问.却发现SQLite连接不上该网络位置的数据库,而如果数据库在本地则一切正常. 例如将SQLite数据库 test. ...
- Flask 的 template模板 与 jinja2语法
Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...
- sublime上配置markdown
等等等等 简书一个不错的教程:Sublime Text3的Markdown配置 补充说明:第一步可以直接找 Tools-->install package control. ^.^ ...
- 剑指Offer面试题:11.调整数组顺序使奇数位于偶数前面
一 题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 二 解题思路 如果不考虑时间复杂度 ...
- SVN客户端与服务器端搭建操作
一.客户端的安装 1.点击安装程序 2.修改svn安装位置 3.开始安装 4.客户端安装成功 5.回到左面 右键出现svn检出 tortoiSVN 表示安装成功 Myeclipse svn插件安装 ...