何为多态
多态指同一个类的对象实现同一个方法时产生不同的结果。
例如:当子类和父类都存在相同的show_info()方法时,我们说,子类的show_info()覆盖了父类的show_info(),在代码运行的时候,子类对象总是会调用子类的show_info()显示不同的结果。这样,我们就获得了继承的另一个好处:多态。
ininstance()判断变量的类型
判断一个变量是否是某个类型可以用isinstance()判断:
>>> isinstance(a, list)
True
type()查看对象的类型
判断对象类型,使用type()函数:
>>> type(123)
<class 'int'>
>>> type('str')
<class 'str'>
>>> type(None)
<type(None) 'NoneType'>
如果一个变量指向函数或者类,也可以用type()判断:
>>> type(abs)
<class 'builtin_function_or_method'>
>>> type(a)
<class '__main__.Animal'>
但是type()函数返回的是什么类型呢?它返回对应的Class类型。
扩展
getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态:
hasattr(obj, ‘x’),判断obj对象是否有x属性,返回True/False
setattr(obj, ‘y’, 19),设置对象obj的属性y的值为19,不存在则新建一个。
getattr()
getattr(obj, x) # 获取对象obj的方法或属性x的值。
如果试图获取不存在的属性,会抛出AttributeError的错误:
getattr(obj, ‘z’) # 获取属性’z’
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘MyObject’ object has no attribute ‘z’
可以传入一个default参数,如果属性不存在,就返回默认值:
getattr(obj, ‘z’, 404) # 获取属性’z’,如果不存在,返回默认值404。