文章目录
- 一、类与对象
- 二、构造方法
- 三、toString方法
- 四、__eq__方法,相当于equals
- 五、封装、继承与多态
- 1.封装
- 2.继承
- 3.重写
- 4.类型注解
- 5.多态
- 6.抽象类与抽象方法
「章节总览」
【2024速通python之python基础 https://blog.csdn.net/weixin_45404884/article/details/138578955】
【2024速通python之python进阶 https://blog.csdn.net/weixin_45404884/article/details/138663338】
【2024速通python之python高阶 https://blog.csdn.net/weixin_45404884/article/details/138810133】
【2024速通python之python面向对象https://blog.csdn.net/weixin_45404884/article/details/139473507】
一、类与对象
class Student:name = Noneage = Nonegrade = Nonedef say_hello(self):print(f"hello 我是:{self.name},我的年龄:{self.age},我的成绩:{self.grade}")student = Student()
student.name = "lisi"
student.age = 18
student.grade = 99
student.say_hello()
二、构造方法
- Python类可以使用:init()方法,称之为构造方法。
可以实现:- 在创建类对象(构造类)的时候,会自动执行。
- 在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用。
- 千万不要忘记init前后都有2个下划线
class Student:name = Noneage = Nonegrade = Nonedef __init__(self, name, age, grade):self.name = nameself.age = ageself.grade = gradedef say_hello(self):print(f"hello 我是:{self.name},我的年龄:{self.age},我的成绩:{self.grade}")student = Student("lisi", 18, 99)
student.say_hello()
三、toString方法
class Student:name = Noneage = Nonegrade = Nonedef __init__(self, name, age, grade):self.name = nameself.age = ageself.grade = gradedef __str__(self):return f'{self.name}, {self.age}, {self.grade}'student = Student("lisi", 18, 99)
print(student)
四、__eq__方法,相当于equals
class Student:name = Noneage = Nonegrade = Nonedef __init__(self, name, age, grade):self.name = nameself.age = ageself.grade = gradedef __eq__(self, other):return self.name == other.name and self.age == other.age and self.grade == other.gradestudent1 = Student("lisi", 18, 99)
student2 = Student("lisi", 18, 99)
student3 = Student("lisi", 18, 98)
print(student1 == student2)
print(student1 == student3)
五、封装、继承与多态
1.封装
将现实世界事物在类中描述为属性和方法,即为封装。
类中提供了私有成员的形式来支持。
- 私有成员变量
- 私有成员方法
定义私有成员的方式非常简单,只需要:
- 私有成员变量:变量名以__开头(2个下划线)
- 私有成员方法:方法名以__开头(2个下划线)
即可完成私有成员的设置
class Student:name = Noneage = Nonegrade = None__number = Nonedef __print_name(self):print(self.name)
2.继承
- 单继承
class 类名(父类名)
class smallStudent(Student):def __init__(self, name, age, grade):self.name = nameself.age = ageself.grade = grade
- 多继承
class 类名(父类名,父类名),默认以继承顺序(从左到右)为优先级
即:先继承的保留,后继承的被覆盖
class small1Student(Student, smallStudent):def __init__(self, name, age, grade):self.name = nameself.age = ageself.grade = grade
3.重写
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:
方式1:
调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
方式2:
使用super()调用父类成员
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
class Phone:name = "Phone"number = Nonedef print_name(self):print(self.name)class myPhone(Phone):name = "myPhone"number = Nonedef print_name(self):print(super().name)print(Phone.name)
4.类型注解
不太明显的变量类型,采用加冒号的形式,确定他的类型
class Phone:name : str = "Phone"number : int = 12
5.多态
class Animal:def speak(self):passclass Dog(Animal):def speak(self):print("I am a Dog")class Cat(Animal):def speak(self):print("I am a Cat")dog = Dog()
dog.speak()
cat = Cat()
cat.speak()
6.抽象类与抽象方法
上面示例中的pass,即声明了Animal的speak方法是抽象方法,所以Animal是抽象类