文章目录
相关笔记链接:
【Python学习笔记】一.Python3基础语法
【Python学习笔记】二.Python3基本数据类型
【Python学习笔记】三.Python3数据类型转换
【Python学习笔记】四.Python3推导式
【Python学习笔记】五.Python3解释器
【Python学习笔记】六.Python3注释
【Python学习笔记】七.Python3运算符
【Python学习笔记】八.Python3条件控制
【Python学习笔记】九.Python3循环语句
【Python学习笔记】十.Python3迭代器与生成器
【Python学习笔记】十一.Python3函数
【Python学习笔记】十二.Python3模块
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1.面向对象技术简介
- 类(Class): 用来描述具有
相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 - 方法:类中定义的
函数。 - 类变量:类变量在整个实例化的对象中是
公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。(PHP的成员变量) - 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的
覆盖(override),也称为方法的重写。 - 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
- 实例化:
创建一个类的实例,类的具体对象。 - 对象:通过类定义的数据结构实例。对象包括两个
数据成员(类变量和实例变量)和方法。
2.类定义
# class为类的关键字,ClassName是类的名称
class ClassName:
<statement-1>
.
.
.
<statement-N>
3.类对象
3.1.类的定义及实例化
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是self。
代码示例:
class PrintMessage:
"""定义一个一个打印信息的类"""
# 定义类的成员属性date
date = '2022-05-15'
# 定义类的成员方法f1
def f1(self):
return 'hello world'
# 定义类的成员方法f2
def f2(self):
return 'welcome to China'
# 实例化这个类
x = PrintMessage()
# 调用类的成员属性和成员方法
print("PrintMessage类的属性date为:", x.date)
print("PrintMessage类的方法f1为:", x.f1())
print("PrintMessage类的方法f2为:", x.f2())
"""输出结果为:
PrintMessage类的属性date为: 2022-05-15
PrintMessage类的方法f1为: hello world
PrintMessage类的方法f2为: welcome to China
"""
3.2.构造方法__init__
构造方法__init__() 在类实例化时会自动调用。
代码示例:
class PrintMessage:
"""一个打印信息的类"""
date = '2022-05-15'
def __init__(self):
print("这是构造方法")
def f1(self):
return 'hello world'
def f2(self):
return 'welcome to China'
x = PrintMessage()
"""输出结果为:
这是构造方法
"""
3.3.带参数的构造方法
代码示例:
class PrintMessage:
"""一个打印信息的类"""
def __init__(self, month):
# 构造方法根据传入的参数month,给成员属性赋值
self.month = month
print("这是构造方法")
# 实例化类的时候,传入参数;参数交给__init__构造方法
x = PrintMessage('5月')
print("当前月份为:", x.month)
4.类的方法
- 在类的内部,使用
def 关键字来定义一个方法 - 与一般函数定义不同,类方法必须包含
参数 self, 且为第一个参数,self 代表的是类的实例。
代码示例:
class Person:
"""定义类的基本属性"""
name = ''
age = 0
"""私有属性用__开头"""
__weight = 0
def __init__(self, name, age, weight):
self.name = name
self.age = age
self.__weight = weight
def speak(self):
print("姓名:", self.name, ',年龄:', self.age, "体重:", self.__weight)
# 实例化类
person1 = Person('allen', 20, '65kg')
person2 = Person('allenpandas', 25, '70kg')
# 调用类内的方法
person1.speak()
person2.speak()
5.继承
继承结构:
class DerivedClassName(BaseClassName):
<statement-1>
.
.
.
<statement-N>
代码示例:
class Person:
"""定义类的基本属性"""
name = ''
age = 0
"""私有属性用__开头"""
__weight = 0
def __init__(self, name, age, weight):
self.name = name
self.age = age
self.__weight = weight
def speak(self):
print("姓名:", self.name, ',年龄:', self.age, "体重:", self.__weight)
class Student(Person): # 继承自Person类
"""定义类的基本属性"""
grade = ''
def __init__(self, name, age, weight, grade):
# 继承父类的构造函数
Person.__init__(self, name, age, weight)
# 自己的构造函数,给成员属性赋值
self.grade = grade
def speak(self):
print("我是:", self.name, ', 年龄:', self.age, ", 年级为:", self.grade)
# name, age, weight都是继承自父类的,grade是子类,通过实例化传参得到的
student1 = Student('allenpandas', '25', '75kg', '研究生一年级')
student1.speak()
6.多继承
- Python同样
有限的支持多继承形式。 - 需要注意圆括号中
父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索。
多继承结构:
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
7.方法重写
代码示例:
class Parent:
def speak(self):
print('这是父类的方法')
def eat(self):
print('这是父类的方法')
class Student(Parent):
def speak(self):
print('这是子类的方法')
# 实例化类
student1 = Student()
# 子类的speak方法覆盖了父类的speak方法,所以student1的speak输出为“这是子类的方法”
student1.speak()
# 子类继承了父类的eat方法,所以student1的eat输出为“这是父类的方法”
student1.eat()
8.类的属性与方法
8.1.私有属性和公有属性
- 私有属性:__weight,只能类内使用。
- 公有属性:weight
代码示例:
class Student:
age = 18
__weight = '60kg'
# 实例化
student1 = Student()
print("student1的公有属性age为:", student1.age) # 正常输出
print("student1的私有属性__weight为:", student1.__weight) # 报错
"""输出结果为:
student1的公有属性age为: 18
Traceback (most recent call last):
File "/Users/allenpandas/Project/learning-language/xxx.py", line 101, in <module>
print("student1的私有属性__weight为:", student1.__weight)
AttributeError: 'Student' object has no attribute '__weight'
"""
8.2.私有方法和共有方法
- 私有方法:__speak(self),只能类内使用。
- 共有方法:speak(self)
代码示例:
class Student:
def speak(self):
print('这是共有方法')
def __speak(self):
print('这是私有方法')
# 实例化
student1 = Student()
student1.speak() # 调用公有方法,正常输出
student1.__speak() # 调用私有方法,报错
"""输出结果为:
这是共有方法
Traceback (most recent call last):
File "/Users/allenpandas/Project/learning-language/xxx.py", line 117, in <module>
student1.__speak()
AttributeError: 'Student' object has no attribute '__speak'
"""
8.3.类的专有方法
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
版权声明:本文为m0_38068876原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。