面向对象--进阶

一,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)
简单示例

 

转载于:https://www.cnblogs.com/wangjun187197/p/9561563.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值