面向对象相关

1. isinstance/issubclass/type

1.1. 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)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
isinstance
1.2. issubclass  检查第一个参数是否是第二个参数的 子子孙孙类
class Base(object):
    pass

class Foo(Base):
    pass

class Bar(Foo):
    pass

print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的 子子孙孙类
issubclass
1.3. type 获取当前对象是由那个类创建
class Foo(object):
    pass

obj = Foo()

print(obj,type(obj))    # 获取当前对象是由那个类创建。
if type(obj) == Foo:
    print('obj是Foo类型')
else:
    print('obj不是Foo类型')
type

 

 

2. 方法和函数

2.1.如何判断是方法还是函数:MethodType, FunctionType
from types import MethodType, FunctionType
# 先引入模块

def chenk(args):
    if isinstance(args, MethodType):
        print('是方法')
    elif isinstance(args, FunctionType):
        print('是函数')

chenk(xxx) 

想要看谁是方法还是函数就把谁传入到函数里,再判断

2.2. callable()判断什么就把什么括起来  返回True就可以被调用,反之false就不可被调用

3. 反射

getattr   根据字符串的形式,去对象中找成员。(根据第二个参数(字符串)去第一个参数(对象,类或模块)中寻找与之同名的成员)
hasattr 根据字符串的形式,去判断对象中是否有成员。(判断第一个参数(对象,类或模块)中是否有第二个参数(字符串)这个成员)
setattr 根据字符串的形式,动态的设置一个成员(内存)
delattr 根据字符串的形式,动态的删除一个成员(内存)
class Foo():
    def __init__(self,name):
        self.name = name

    def func(self):
        print('我是%s,长得帅'% self.name)

obj = Foo('侯明巍')
setattr(obj,'age',26)  # 动态的给对象设置一个变量(改变变量的值)
# 实际开发中慎用setattr,能不用就不用
print(getattr(obj,'age'))


# print(obj.name)
# delattr(obj,'name')   # 删除对象中的变量
# print(obj.name)

val = input('请输入要执行的动作:')
if hasattr(obj,val):
    func = getattr(obj,val)
    func()
小示例练习

 






posted @ 2018-09-15 15:28  一纸休书  阅读(138)  评论(0编辑  收藏  举报