Python入门进阶教程-面向对象
- 2019 年 12 月 31 日
- 筆記
作者:一叶
介绍:放不下灵魂的搬砖者
全文共1750字,阅读全文需7分钟
Python版本3.8.0,开发工具:Pycharm
Python面向对象
面向对象编程(Object Oriented Programming),是使用对象(Objects)作为核心的编程方式。进而就可以把对象(Objects)的数据和运算过程封装(Encapsulate)在内部,而外部仅能根据事先设计好的界面(Interface)与之沟通。
对象的构成:
- 属性 —— 用自然语言描述,通常是名词(Nouns)
- 方法 —— 用自然语言描述,通常是动词(Verbs)
举个例子:创建一个对象Teacher(老师) Teacher的属性有name(姓名)、age(年龄)等,Teacher 的方法有teacher(上课)、study(学习) EnglishTeacher(英语老师)也属于Teacher,所以EnglishTeacher可以继承Teacher并且使用Teacher的属性和方法 MathTeacher(数学老师)的teach方法不同于EnglishTeacher,所以可以对方法进行重写。
类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法
在类的内部,使用 def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定用 self。
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。在类内部调用self.__private_methods。
Python 类定义
Class 使用 class 关键字进行定义。class name使用驼峰标识,例如MyClass
1# 定义类 2class Teacher: 3 def __init__(self, name, age): 4 self.name = name 5 self.age = age 6 7 def teach(self): 8 print("{0} teach".format(self.name)) 9 10 def study(self): 11 print("{0} study".format(self.name)) 12 13# 创建类的实例 14my_teacher = Teacher("zhangsan", 18) 15my_teacher.teach() 16 17# 输出 18zhangsan teach
注:
- self 用来指代将来用这个 Class 创建的 Instance实例。
- init() 函数是系统创建实例后被初始化的函数。这个函数名称是强制指定的,初始化函数必须使用这个名称;注意 init 两端各有两个下划线 _。
- self.name,self.age 各接收了一个参数,表示用户属性
Python 类继承
继承,顾名思义,新的事物拥有旧事物的特征,并且可以传递下去。 在Python中,继承的范围更广,比如定义一个实例Teacher,则新的实例EnglishTeacher是老师,所以可以继承Teacher。老师有姓名、年龄、性别等属性,有上课、学习等方法,则英语老师继承老师的所有属性和方法。 再比如,定义一个实例Mother母亲,定义一个实例Father父亲,则新的实例Kids孩子不但可以继承Mother还可以继承Father。 以上两个例子分别是单继承和多继承。 Python可以实现单继承和多继承
单继承
1# EnglishTeacher继承Teacher类 2class EnglishTeacher(Teacher): 3 def __init__(self, name, age, score): 4 self.name = name 5 self.age = age 6 self.score = score 7 8 def teach(self): 9 print("{0} teach".format(self.name)) 10 11# 创建类的实例 12teacher = EnglishTeacher("xiaomeng", 10) 13teacher.teach() 14 15# 输出 16xiaomeng study
多继承
1# 定义父亲类 2class Father: 3 def __init__(self, name, age): 4 self.name = name 5 self.age = age 6 7 def speak(self): 8 print("{0} is father".format(self.name)) 9 10# 定义母亲类 11class Mother: 12 def __init__(self, name, age): 13 self.name = name 14 self.age = age 15 16 def speak(self): 17 print("{0} is mother".format(self.name)) 18 19# Kid继承Father和Mother类 20class Kid(Father, Mother): 21 def speak(self): 22 print("{0} is kid".format(self.name)) 23 24 25# 创建类的实例 26kid = Kid("student", 6) 27kid.speak() 28 29# 输出 30baby is kid
Python 类方法重写
在我们定义的老师实例中,老师有上课、学习两个方法,但是英语老师上英语课,数学老师上数学课,不同实例的老师有不同的方法实现,这个时候,我们在创建不同老师实例的过程中需要对方法进行重写。
1# 创建类的实例 2class EnglishTeacher(Teacher): 3 # 重写teach方法 4 def teach(self): 5 print("english teacher {0} teach".format(self.name)) 6 7teacher = EnglishTeacher("xiaomeng", 10) 8teacher.teach() 9 10# 输出 11english teacher xiaomeng teach
运算符重载
运算符重载类似于方法重写,不过运算符的方法属于Python定义好的,我们在创建的时候不需要声明都可以进行重载!
1class Vector: 2 def __init__(self, a, b): 3 self.a = a 4 self.b = b 5 6 def __str__(self): 7 return 'Vector (%d, %d)' % (self.a, self.b) 8 9 # 对 + 运算符重载 10 def __add__(self,other): 11 return Vector(self.a + other.a, self.b + other.b) 12 13v1 = Vector(2,10) 14v2 = Vector(5,-2) 15print (v1 + v2) 16 17# 输出 18Vector (7, 8)
Python系列
Python系列会持续更新,从基础入门到进阶技巧,从编程语法到项目实战。若您在阅读的过程中发现文章存在错误,烦请指正,非常感谢;若您在阅读的过程中能有所收获,欢迎一起分享交流。
如果你也想和我一起学习Python,可以关注我
学习Python,我们不只是说说而已
下节将介绍Python正则表达式
End