python面向对象编程——issubclass、isinstance、type、dir函数

14. issubclass() 与 isinstance()

  • issubclass()用于判断类对象与类对象之间的关系
  • isinstance()用于判断实例对象与类对象之间的关系

1. issubclass():

  • 接受两个参数:
    第一个实参是类对象
    第二个实参是类对象或实例对象组成的元组
  1. 第二个实参是类对象时,如果第一个类对象是第二个实参的子类则返回True
  2. 第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意一个类对象的子类则返回True
>>> class A(object):
>>>     pass
>>> class B(object):
>>>     pass
>>> class C(object):
>>>     pass
>>> class D(A):
>>>     pass
>>> issubclass(D, A)
True
>>> issubclass(D, B)
False
>>> issubclass(D, (A, B, C))
True
>>> issubclass(D, (B, C))
False

2. isinstance():

  • 接受两个参数
    第一个是实例对象
    第二个是类对象或类对象组成的元组
  1. 当第二个实参是类对象时,如果第一个实参是第二个实参的实例对象或其子类的实例对象,则返回TURE
  2. 第二个实参是类对象组成的元组时,如果第一个实参是第二个实参中任意一个类对象或其子类的实例对象则返回TRUE
>>> isinstance(D(), D)
True
>>> isinstance(D(), B)
False
>>> isinstance(D(), A)
True
>>> isinstance(D(), (B,C))
False
>>> isinstance(D(), (A,B,C))
True

15. type()与dir()

1. type(): 用于获得指定对象的类型

  1. 实例对象的类型就是其对应的类对象
#实例对象的类型就是其对应的类对象
>>> class MyClass(object):
>>>     pass
>>> mc = MyClass()
>>> print(type(mc))
<class '__main__.MyClass'>
  1. 类对象的类型是type,类对象是type的实例对象
#类对象的类型是type
>>> print(type(MyClass))
<class 'type'>
  1. 自定义函数的类型是function
#自定义函数的类型是function
>>> def do_sth():
>>>     pass
>>> print(type(do_sth))
<class 'function'>
  1. 内置函数的类型是builtin_function_or_method
#内置函数的类型是builtin_function_or_method
>>> print(type(dir))
<class 'builtin_function_or_method'>
>>> print(type(dir()))
<class 'list'>
  1. 可以用==判断某个对象的类型是否为指定的类型(只适用于基本数据类型
#可以用==判断某个对象的类型是指定的类型(只适用于基本数据类型)
>>> print(type(123) == int)
True
  1. 非基本数据类型需要使用标准库中的模块types中定义的变量判断其类型是否为指定类型
#非基本数据类型
>>> print(type(do_sth) == function)  #报错
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-13-9963405ff686> in <module>()
     26 #非基本数据类型
---> 27 print(type(do_sth) == function)  #报错
NameError: name 'function' is not defined

>>> import types
>>> print(type(do_sth) == types.FunctionType)
True

2. dir()

  • 对于制定的类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括重父类中继承的)列表
  • 类对象与实例对象的结果不同,类对象的结果中不包括实例属性
class MyClass(object):
	#在类对象内部(方法外)绑定类属性
    ca = 'ca'
    #构造属性
    def __init__(self):
        # 在类对象内部绑定实例属性
        self.ia = 'ia'
    #定义实例方法    
    def im(self):
        pass
    #定义类方法
    @classmethod
    def cm(cls):
        pass
    #定义静态方法
    @staticmethod
    def sm():
        pass

#类对象的结果中不包括实例属性
>>> print(dir(MyClass))     #没有实例属性ia
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'ca', 'cm', 'im', 'sm']
>>> print(dir(MyClass()))   #有实例属性ia
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'ca', 'cm', 'ia', 'im', 'sm']
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值