不久之前遇到生成器的问题,我发现有些Python知识很久不用都忘了,并且最近学习人工智能也会用到Python。所以我打算用一周的时间来回顾重点,温故知新,今天复习的部分是类。
NO.1 对象(object)与类(class)
对象:对于面向对象编程来说,我们可以把任何现实存在符合逻辑的物体看作对象。
类:在Python中我们可以用类来表达一个对象,类可以用来表示有相同的属性和方法的对象的集合。
为什么使用对象?
1.使用对象可以让我们更好的设计和组织代码,更好的封装/划分
2.减少重复的代码,提升可读性和可管理性
上面的段落很抽象,容易让人产生迷惑。我们可以来举个例子:我们把车看成一个对象,在平时生活中,我们不需要知道车内的构造,只需要知道怎么开就好。在代码中,预先存在一个车的类,我们不需要知道类的变量和方法是如何实现的,我们只需要调用他们就好,这就有了良好的封装性。并且我们如果在代码中需要编写奔驰与宝马,我们已经有了一个车的类,奔驰与宝马都属于车,所以只需要调用车的类,不需要重新写奔驰与宝马的代码,这样就大大减少了我们的工作量,而且还是代码更加简洁,提升可读性与可管理性
NO.2 如何编写类(class)
类拥有类的变量(attributes)和方法(Methods)
变量为对象所具有的属性,方法为对象的行为
例:一个车的类Class Car
变量为车的品牌与价格,方法为更换车的发动机
上图表达的是如何定义一个类,注意事项如下:
定义一个类,我们首先要书写类的名字,注意类的名字首字母要大写。例:车的类,class Car。
__init__(self...) 方法是类的初始化方法,也就是说没创建一个类的实例时,都会调用该方法创建该实例的变量属性。
“self”代表的是该类的本身,我们在定义方法的时候必须有它(表示创建实例类的本身),不过在调用时我们不用传入相应参数(python自动传入)。
例:创建了一个类MyClass,实例化MyClass得到了MyObject这个对象,然后调用这个对象的方法MyObject.method(arg1,arg2),这个过程中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)
instance1 = ClassName(123, 'hello') 也就是传入相应参数并由__init__(self...) 方法接受,创建一个新的实例。
我们可以使用点号(.)访问类中的属性和方法。例: Car.attribute1Car为该类,后面加点号,然后是想要调用的属性或方法。
NO.3 打印(print)出一个类
如上所示,我们直接print一个类,只能输出该类的内存地址,所以我们如果想要显示具体内容就需要一个神奇的方法 __str__(self)
NO.4 给已有的类增加属性
Python不像C++与Java,它可以随时给类增加属性,而不是必须在定义类的时候把所有属性都加上。
NO.5 类的继承
从上图我们可以看到两个类Employee和Manager
Employee为父类,Manage为子类继承了父类的所有属性与方法,集成方法为在定义子类的时候调用父类:class Manager(Employee)
NO.6 类的方法与属性重写
再上图中我们可以看到Manager类(子类)中继承了Employee类(父类)的属性与方法,不过重写了work方法。
特别注意:如果我们重写了子类的__init__( )方法,但是还想要继承父类的初始化属性的话,可以使用super().__init__()
如图所示,子类manager使用该方法继承了Employee的初始化属性name与title,只不过title被永久定义为“Manager"。
至此关于类的重点知识已经复习完毕,明天会更新Exception和单元测试的知识点
领取专属 10元无门槛券
私享最新 技术干货