❤️ 博客主页:水滴技术
订阅专栏:Python 入门核心技术
支持水滴:点赞 + 收藏⭐ + 留言
大家好,我是水滴~~
本篇主要讲述 Python 中的类和对象,主要内容有:面向对象编程、创建类、创建实例、属性的默认值、修改属性值、继承等。
在介绍 Python 的类和对象之前,我们先了解一下面向对象编程的概念。那么什么是面向对象编程呢?
面向对象编程(Object Oriented Programming,OOP)是最有效的软件编写方法之一。在面向对象编程中,你可以将现实世界中的任何事务和情景抽象成一个对象(Object),而这个对象可以使用类(Class)来表示。例如,现象世界中的人,可以抽象成一个
Person
类。
而对象的一些特征,可以使用类的属性(Property)来表示。例如,人的特征有姓名、性别、年龄等,可以抽象出属性 name
、sex
、age
。
另外对象还可以做一些动作,可以使用类的方法(Method)来表示。例如,人可以跑步、看书、写代码等,可以抽象出方法running()
、reading()
、coding()
而根据类来创建一个具体的对象,称为一个实例(Examples),这个创建的过程称为实例化。而一个类可以有无数个实例。
类包含了属性和方法。在 Python 中,使用
class
关键字来声明一个类,使用__init__()
方法初始化属性值,而定义方法和定义函数一样,也就是说,我们把定义在类中的函数称为方法。
下面定义了一个 Person
类,使用特殊的__init__()
方法来初始化 name
、sex
、age
,并定义了三个方法 running()
、reading()
、coding()
。
class Person:
"""
这是一个 Person 类,
它有姓名、性别、年龄三个属性,
它可以跑步、看书、写代码
"""
def __init__(self, name, sex, age):
"""定义一个初始化方法,用于初始化属性的值"""
self.name = name
self.sex = sex
self.age = age
def running(self):
"""定义一个跑步方法"""
print(self.name + "正在跑步")
def reading(self):
"""定义一个看书方法"""
print(self.name + "正在看书")
def coding(self):
"""定义一个写代码方法"""
print(self.name + "正在写代码")
定义类也有很多需要注意的地方:
__init__()
是一个特殊的方法,每次初始化实例时都会自动调用它,用于初始化实例的属性值。self
形参,它是必不可少的,并且只有在方法的第一个形参。self
是一个指向实例本身的引用,用于访问实例中的属性和方法。这种通过实例来访问的变量称为属性。类创建好后,就可以通过类来创建具体的实例了。
创建实例时需要指定类名,由于会自动调用
__init__()
方法,所以需要指定其实参。另外可以根据需要创建任意数量的实例,为每个实例指定不同的实例名即可。
下面例子,创建了一个姓名为“张三”的实例,并将这个实例存在在变量 person
中:
# 创建 Person 的实例,实例名为 person
person = Person("张三", "男", 18)
要访问实例的属性,可以使用句点来访问。下面例子分别访问 person
实例的三个属性,并输出属性值:
# 访问 person 实例的属性,并使用 print 输出属性值
print(person.name)
print(person.sex)
print(person.age)
输出结果:
张三
男
18
要调用实例的方法,同样使用据点来调用(即使方法没有行参,调用时也不要忘记在后面加括号()
)。下面例子分别调用了 person
实例的三个方法。
# 调用 person 实例的方法
person.running()
person.reading()
person.coding()
输出结果:
张三正在跑步
张三正在看书
张三正在写代码
类中的每个属性都必须有初始值,否则将无法访问。对于一些属性,可以指定其默认值。
在初始化方法中,可以直接指定默认值,无需行参来指定。
class Person:
"""
这是一个 Person 类,
它有姓名、性别、年龄三个属性,
它可以跑步、看书、写代码
"""
def __init__(self, name, sex):
"""定义一个初始化方法,用于初始化属性的值"""
self.name = name
self.sex = sex
self.age = 18
...
在类中,可以直接声明一个属性,并指定其默认值。
class Person:
"""
这是一个 Person 类,
它有姓名、性别、年龄三个属性,
它可以跑步、看书、写代码
"""
age = 18
def __init__(self, name, sex):
"""定义一个初始化方法,用于初始化属性的值"""
self.name = name
self.sex = sex
...
属性的值通过初始化后,是可以修改的,下面列出了两种修改的方法:
要修改属性的值,最简单的方法是通过实例直接访问它并赋值。
# 创建 Person 的实例,实例名为 person
person = Person("张三", "男")
# 修改 sex 属性值
person.sex = "女"
在类中可以定义一个修改属性值的方法,调用后即可修改属性的值。
def set_sex(self, sex):
"""定义一个设置性别属性值的方法"""
self.sex = sex
在创建类时,还可以选择继承现有的类,当一个类继承了另一个类时,它将自动获得另一个类的所有属性和方法。被继承者称为父类,继承者称为子类。子类不但拥有父类的所有属性和方法,同时还可以定义自己的属性和方法。
创建子类时,需要在类名后面指定父类名称,并在
__init__()
方法中初始化父类的属性。
下面例子我们创建一个 Woman
子类,该类继承上面例子中的 Person
类:
class Woman(Person):
"""
这是一个 Woman 类,它继承了 Person 类,
它具有父类的三个属性,
它具有父类的三个方法
"""
def __init__(self, name, age):
"""初始化父类的属性"""
super().__init__(name, "女", age)
我们创建的 Woman
子类,已经明确知道她的性别为“女”,所以初始化方法中无需指定行参 sex
,在初始化父类属性时,将 sex
参数固定为“女”即可。
当然子类是可以有自己的属性和方法的。
下面例子中,为 Woman
子类增加了 height
属性和 movies()
方法:
class Woman(Person):
"""
这是一个 Woman 类,它继承了 Person 类,
它除了有父类的三个属性,还有自己的属性:身高,
它除了有父类的三个方法,还有自己的方法:看电影
"""
def __init__(self, name, age, height):
"""初始化父类的属性"""
super().__init__(name, "女", age)
"""初始化自己的属性"""
self.height = height
def movies(self):
"""定义一个看电影方法"""
print(self.name + "正在看电影")
当父类的方法不适用于子类时,可以在子类中重写父类的方法。
例如:我们定义的 Woman
子类不会写代码,那么就可以重写父类的 coding()
方法。
class Woman(Person):
"""
这是一个 Woman 类,它继承了 Person 类,
它除了有父类的三个属性,还有自己的属性:身高,
它除了有父类的三个方法,还有自己的方法:看电影
"""
def __init__(self, name, age, height):
"""初始化父类的属性"""
super().__init__(name, "女", age)
"""初始化自己的属性"""
self.height = height
def movies(self):
"""定义一个看电影方法"""
print(self.name + "正在看电影")
def coding(self):
"""重写父类的写代码方法"""
print(self.name + "不会写代码")
我们在使用子类的实例时并没有特殊的地方,访问其父类的属性和方法的方式,与访问子类的方式完全相同。
下面例子创建了 Woman
的实例,调用了实例的方法,并访问了实例的属性
# 创建 Woman 的实例,并将实例存在到变量 woman 中
woman = Woman("小红", 18, 165)
# 调用 woman 实例的方法
woman.running()
woman.reading()
woman.coding()
woman.movies()
# 访问 woman 实例的属性,并输出
print(woman.name)
print(woman.sex)
print(woman.age)
print(woman.height)
输出结果:
小红正在跑步
小红正在看书
小红不会写代码
小红正在看电影
小红
女
18
165
Python 基础(一):初识 Python
Python 基础(二):搭建 Python 开发环境
Python 基础(三):Python 集成开发工具 IDLE
Python 基础(四):基础语法
Python 基础(五):变量与常量
Python 基础(六):基本数据类型
Python 基础(七):常用运算符
Python 基础(八):流程控制语句
Python 基础(九):列表
Python 基础(十):元组
Python 基础(十一):集合
Python 基础(十二):字典
Python 基础(十三):函数
《Python入门核心技术》
《IDEA 教程:从入门到精通》
《Java 教程:从入门到精通》
《MySQL 教程:从入门到精通》
《大数据核心技术从入门到精通》