17-python3面向对象之多态

何为多态

多态指同一个类的对象实现同一个方法时产生不同的结果。
例如:当子类和父类都存在相同的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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值