欢迎来到氵一壶灬清酒い的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

面向对象--进阶

一,issubclass / type / isinstance

issubclass :  检查第一个参数是否是第二个参数的派生类.

#issubclass

class Base(object):   pass class Foo(Base): pass class Bar(Foo): pass print(issubclass(Bar,Base))

#True

type: 获取当前对象是由那个类创建.

#type
class Foo(object):
    pass
obj = Foo()

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


#<__main__.Foo object at 0x00455950>  <class '__main__.Foo'>
#obj是Foo类型
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)
练习题

isinstance:检查第一个参数(对象)是否是第二个参数(类及父类的实例).

#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))

#True
#True
#False
#True

二,方法和函数

称谓:

  类,方法

  外,函数

到底是方法还是函数?

  对象.xxx   -->xxx就是方法

  类.xxx   ---> xxx 就是函数

  xxx    ---->  xxx就是函数

from types import MethodType,FunctionType
def check(arg):
    """
    检查arg是方法还是函数?
    :param arg:
    :return:
    """
    if isinstance(arg,MethodType):
        print('arg是一个方法')
    elif isinstence(arg,FunctionType):
        print('arg是一个函数')
    else:
        print('不知道是啥')
代码检查

三,反射

python面向对象中的反射:通过字符串的形式操作对象相关的属性.Python中一切事物皆对象.(都可以使用反射)

(一切皆对象,类本身也是一个对象)

getattr  根据字符串的形式,去对象中找成员.

hasattr  根据字符串的形式,去判断对象中是否有成员.

setattr  根据字符串的形式,动态的设置一个成员(在内存中)

delattr  根据字符串的形式,动态的删除一个成员(在内存中)
class Foo(object):

    country = "中国"

    def func(self):
        pass

v = getattr(Foo,'func') # Foo.func # 根据字符串为参数,去类中寻找与之同名的成员。
print(v)

obj = Foo()
v = getattr(obj,"func") # obj.func # 根据字符串为参数,去对象中寻找与之同名的成员。
print(v)
简单示例

 

posted on 2018-08-30 17:34  成伤大大  阅读(124)  评论(0)    收藏  举报

导航