中国史之【少康中兴】:
少康是夏朝的第六代天子,其父相被敌对的寒浞(zhuo)派人所杀,其最终替父报仇并复国成功。少康中兴是中国历史上首个出现以“中兴”二字命名的时代。
-来源:全历史APP
今天讲python中类的继承和内建函数。有需要的也可以直接去我的github查看全部笔记:
https://github.com/JackKoLing/python_notes_with_ten_days
俗话说:“好记性不如烂笔头”,多写写多记记,总不会错。多一些不为什么的坚持,少一些功利主义的追求。对于环境的配置,可以参考以下两篇:
- win10版 @小保,公众号:CV之道
【深度学习环境配置】手把手实战配置深度学习环境(win10版) - Linux版 @小保,公众号:CV之道
【深度学习环境配置】手把手实战配置深度学习环境(Ubuntu20.04版)
1 类的继承
- 继承描述了父类的属性如何“遗传”给派生类
- 子类可以继承它的父类的任何属性,包括数据属性和方法
- 一个未指定父类的类,其默认有一个名为object的父类
- python允许多重继承,也就是可以有多个父类
- 在创建子类时,只需在类名后跟一个或从其中派生的父类
class ParentClass(object):
gender = 'Male'
def __init__(self, who):
self.name = who
class ChildClass(ParentClass):
def displayInfo(self):
print(self.gender, self.name)
x = ChildClass('jackko') # 自动继承父类的属性和方法
x.displayInfo()
>>>
Male jackko
print(dir(ParentClass))
>>>
['__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__', 'gender']
print(dir(ChildClass)) # 可以看到子类已经继承了父类的属性和方法
>>>
['__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__', 'displayInfo', 'gender']
2 类的继承和属性搜索
- python中可以使用“obj.attribute”来获取属性,但此表达式会启动搜索连续的树
- 创建类的实例时,实例会自动连接到创建了此实例的一个或多个类
- 类连接到父类的方式是:将父类列在类头部的括号内,其从左至右的顺序会决定树中的次序
- 搜索是由下至上,由左到右(python支持多重继承)
- 如:p2继承自p1,当创建p2的实例时,会先搜索p2的属性,若找不到,再去找p1的属性
3 继承方法专用化
- 继承会先在子类寻找变量名,然后才查找父类。因此,子类可以对父类的属性重新定义,来取代继承而来的行为
- 子类可以完全取代从父类继承而来的属性
- 子类也可以通过已覆盖的方法回调父类来扩展超类的方法
# 子类覆盖了父类的方法
class ParClass(object):
def setInfo(self, sex='Male'):
self.gender = sex
class ChiClass(ParClass):
# 覆盖父类的方法
def setInfo(self, who):
self.name = who
x = ChiClass()
x.setInfo('jackko')
print(x.name)
# print(x.gender) # AttributeError: 'ChiClass' object has no attribute 'gender',因为子类覆盖了父类
>>>
jackko
# 子类通过回调扩展父类的方法
class ParClass(object):
def setInfo(self, sex='Male'):
self.gender = sex
class ChiClass(ParClass):
# 覆盖父类的方法
def setInfo(self, who):
self.name = who
ParClass.setInfo(self) # 回调父类的方法,把实例名通过self传给父类
x = ChiClass()
x.setInfo('jackko')
print(x.name)
print(x.gender)
>>>
jackko
Male
4 类、实例和其他对象的内建函数
# 判断一个类是否是另一个类的子类
print(issubclass(ChiClass, ParClass))
>>>
True
# 判断一个对象是否是另一个类的实例
print(isinstance(x, ChiClass))
>>>
True
# 判断一个对象是否拥有指定的属性
print(hasattr(x, 'name'))
>>>
True
# 获取一个对象的指定属性,也能删除一个属性delattr()
print(getattr(x, 'name'))
>>>
jackko
# 设置一个对象的指定属性
print(getattr(x, 'name'))
print(setattr(x, 'name', 'anney')) # 没有返回值
print(getattr(x, 'name'))
>>>
jackko
None
anney
super()
- 在子类中找出其父类以便于调用其属性
- 一般情况下仅能采用非绑定方式调用祖先类方法
- 而super()可用于传入实例或类型对象
- 语法是在__init__(self)内写super(类名, self).init()
【声明】:学习笔记基于互联网上各种学习资源的个人整理。
以上是本期内容,下期介绍python中运算符重载和可调用对象。
我叫小保,一名计算机视觉爱好者、学习者、追随者,欢迎关注我一起学习。
![](https://img-blog.csdnimg.cn/15d674e53cbc42aca66335fd763dff6b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY3blsI_nmb1famFja2tv,size_14,color_FFFFFF,t_70,g_se,x_16)