首页 > 应用开发 > Python > Python入门进阶教程-面向对象
Python版本3.8.0,开发工具:Pycharm
面向对象编程(Object Oriented Programming,OOP),是使用对象(Objects)作为核心的编程方式。
进而就可以把对象(Objects)的数据和运算过程封装(Encapsulate)在内部,而外部仅能根据事先设计好的界面(Interface)与之沟通。
对象的构成:
举个例子:创建一个对象Teacher(老师)
Teacher的属性有name(姓名)、age(年龄)等,Teacher 的方法有teacher(上课)、study(学习)
EnglishTeacher(英语老师)也属于Teacher,所以EnglishTeacher可以继承Teacher并且使用Teacher的属性和方法
MathTeacher(数学老师)的teach方法不同于EnglishTeacher,所以可以对方法进行重写。
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
在类的内部,使用 def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。 我给大家推荐一个学习氛围超好的地方,python交流裙:602加697最后再加820 ,self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定用 self。
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。在类内部调用self.__private_methods。
Class 使用 class 关键字进行定义。class name使用驼峰标识,例如MyClass
# 定义类
class Teacher:
def __init__(self, name, age):
self.name = name
self.age = age
def teach(self):
print("{0} teach".format(self.name))
def study(self):
print("{0} study".format(self.name))
# 创建类的实例
my_teacher = Teacher("zhangsan", 18)
my_teacher.teach()
# 输出
zhangsan teach注:
继承,顾名思义,新的事物拥有旧事物的特征,并且可以传递下去。
在Python中,继承的范围更广,比如定义一个实例Teacher,则新的实例EnglishTeacher是老师,所以可以继承Teacher。老师有姓名、年龄、性别等属性,有上课、学习等方法,则英语老师继承老师的所有属性和方法。
再比如,定义一个实例Mother母亲,定义一个实例Father父亲,则新的实例Kids孩子不但可以继承Mother还可以继承Father。
以上两个例子分别是单继承和多继承。
Python可以实现单继承和多继承
# # EnglishTeacher继承Teacher类
class EnglishTeacher(Teacher):
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def teach(self):
print("{0} teach".format(self.name))
# 创建类的实例
teacher = EnglishTeacher("xiaomeng", 10)
teacher.teach()
# 输出
xiaomeng teach# 定义父亲类
class Father:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print("{0} is father".format(self.name))
# 定义母亲类
class Mother:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print("{0} is mother".format(self.name))
# Kid继承Father和Mother类
class Kid(Father, Mother):
def speak(self):
print("{0} is kid".format(self.name))
# 创建类的实例
kid = Kid("student", 6)
kid.speak()
# 输出
baby is kid在我们定义的老师实例中,老师有上课、学习两个方法,但是英语老师上英语课,数学老师上数学课,不同实例的老师有不同的方法实现,这个时候,我们在创建不同老师实例的过程中需要对方法进行重写。
# 创建类的实例
class EnglishTeacher(Person):
# 重写run 方法
def teach(self):
print("english teacher {0} teach".format(self.name))
student = Student("xiaomeng", 10)
student.walk()
# 输出
english teacher xiaomeng teach运算符重载类似于方法重写,不过运算符的方法属于Python定义好的,我们在创建的时候不需要声明都可以进行重载!
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'Vector (%d, %d)' % (self.a, self.b)
# 对 + 运算符重载
def __add__(self,other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)
# 输出
Vector (7, 8)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69957771/viewspace-2671611/ ,如需转载,请注明出处,否则将追究法律责任。