面向对象中内置函数

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 面向对象 (补充) , 反射 , 内置函数的更多相关文章

  1. python面向对象--类的内置函数

    #isinstance(obj,cls)判断obj是否是类cls的实例 #issubclass(cls,cls1)判断cls是否是cls1的子类或派生类 class Foo: pass class B ...

  2. python 类(object)的内置函数

    python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...

  3. Python标准库:内置函数hasattr(object, name)

    Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...

  4. python字符串——"奇葩“的内置函数

      一.前言 python编程语言里的字符串与我们初期所学的c语言内的字符串还是有一定不同的,比如python字符串里的内置函数就比语言的要多得多:字符串内的书写格式也会有一点差异,例:字符串内含有引 ...

  5. python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序

    exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...

  6. Python开发基础-Day11内置函数补充、匿名函数、递归函数

    内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: divmod(a, b) #a.b为数字,a为除数,b ...

  7. python---issubclass/type/isinstance/ 反射(内置函数getattr/delattr...)

    # 一 python面向对象-内置函数(issubclass(), type(), isinstance()) # issubclass 判断xxxx类是否是xxxx类的子类 class egg: p ...

  8. python基础之反射内置方法元类

    补充内置函数 isinstance(obj,Foo)   # 判断obj是不是foo的实例 issubclass()      # 判断一个类是不是另一个类的子类 反射 什么是反射? 通过字符串来操作 ...

  9. Python学习日记(十一) 内置函数

    什么是内置函数? 就是Python中已经写好了的函数,可以直接使用 内置函数图表: 以3.6.2为例 内置函数分类: 一.反射相关 1.hasattr() 2.getattr() 3.setattr( ...

随机推荐

  1. FlashDevelop安装配置

    1.下载 FlashDevelop,flash sdk,flash sdk debug,.net framework,java sdk(32位,不管机器是多少位,否则不能单步调试的) 2.  安装Fl ...

  2. Qt中内存泄露和退出崩溃的问题

    http://blog.csdn.net/wangkuiyun/article/details/7412379

  3. [Mvel]Mvel2.0使用指南一 基础

    MVEL在很大程度上受到Java语法的启发,作为一个表达式语言,也有一些根本的区别,旨在更高的效率,例如:直接支持集合.数组和字符串匹配等操作以及正则表达式. MVEL用于执行使用Java语法编写的表 ...

  4. 《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器

    定时器 规则用基于 interval(间隔)和cron的定时器(timer),替代了被标注过时的duration 属性.timer属性的使用示例: timer ( int: <initial d ...

  5. ffmpeg推送RTSP直播流到EasyDarwin报错问题的修复

    在之前的博客<ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播>中,我们介绍了如何采用ffmpeg进行RTSP推送,实现EasyDarwin直播分发的功能,近期 ...

  6. 利用struts2的json返回方式来控制jquery.validate的remote框架,进行表单验证

  7. HDU - 3374:String Problem (最小表示法模板题)

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  8. bzoj 2770 YY的Treap

    Written with StackEdit. Description 志向远大的\(YY\)小朋友在学完快速排序之后决定学习平衡树,左思右想再加上\(SY\)的教唆,\(YY\)决定学习\(Trea ...

  9. LeetCode Partition to K Equal Sum Subsets

    原题链接在这里:https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/ 题目: Given an arr ...

  10. 转载 fpga中 restoring 和 non-restoring 除法实现。

    对于non-restoring方法,主要是用rem和den移位数据比较,rem_d长度为den+nom的总长,den_d长度为den+nom的总长度,rem_d的初始值为{{d_width{1'b0} ...