Max Zhang Lv4

在 Python 中,类是一种抽象的数据类型,它是对现实世界中的事物的抽象,和其他编程语言一样,Python 也支持类的定义和使用。

类和实例是两个不同的概念,类是对现实世界中的事物的抽象,而实例是类的具体实现。也就是说,类是一个模板,实例是根据模板创建的对象。比如学生是一个类,而小明,小红是学生类的实例。

定义类

在 Python 中,使用 class 关键字来定义类,语法如下:

1
2
3
4
5

class ClassName:
# class body
pass

构造函数

构造函数是类的一种特殊方法,它在创建对象时自动调用,用来初始化对象的属性。在 Python 中,构造函数的名称是固定的,即 __init__,语法如下:

1
2
3
4
5
6

class ClassName:
def __init__(self, parameters):
# constructor body
pass

每一个类在创建一个实例的时候,都会自动调用构造函数,用来初始化实例的属性。

属性和方法

在 Python 中,类可以包含属性和方法,属性是类的特征,方法是类的行为。

属性

属性是类的特征,它用来描述类的状态。在 Python 中,属性是类的变量,它可以是类变量,也可以是实例变量。

方法

方法是类的行为,它用来描述类的操作。在 Python 中,方法是类的函数,它可以是类方法,也可以是实例方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

class Person:
def __init__(self, name: str, age: int):
# constructor body
self.name = name
self.age = age

def get_name(self):
return self.name

def get_age(self):
return self.age

obj = Person("Tom", 18)

print(obj.name) # Tom
print(obj.age) # 18

print(obj.get_name()) # Tom
print(obj.get_age()) # 18

在 Python 中,类的方法第一个参数是 self,它表示类的实例本身,通过 self 可以访问类的属性和方法。比如在创建了一个 Person 类的实例 obj 之后,通过 obj.get_name() 可以获取 objname 属性。同样的,通过 obj.name 也可以获取 objname 属性。obj.get_name()称为实例方法,obj.name称为实例属性。一但创建了一个类的实例,就可以通过实例来访问类的属性和方法。

类的继承

在 Python 中,类的继承是一种重要的特性,它可以让一个类继承另一个类的属性和方法。继承的类称为子类,被继承的类称为父类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

class Animal:
def __init__(self, name: str):
self.name = name

def get_name(self):
return self.name

class Dog(Animal):
def __init__(self, name: str, age: int):
super().__init__(name)
self.age = age

def get_age(self):
return self.age

dog = Dog("Tom", 3)

print(dog.get_name()) # Tom
print(dog.get_age()) # 3

在上面的例子中,Animal 是父类,Dog 是子类。继承的语法是通过在子类的类名后面加上父类的类名,用括号括起来。在子类的构造函数中,通过 super().__init__(name) 调用父类的构造函数,用来初始化父类的属性。通过继承,子类可以继承父类的属性和方法。

也就是说,新创建的 Dog 类的实例 dog 既可以调用 Dog 类的方法,也可以调用 Animal 类的方法。

多态

多态是指不同的类可以对同一个方法做出不同的响应。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Animal:
def sound(self):
pass

class Dog(Animal):
def sound(self):
return "Woof"

class Cat(Animal):
def sound(self):
return "Meow"

# 函数接受Animal类型的参数
def make_sound(animal: Animal):
return animal.sound()

# 创建不同的动物对象
dog = Dog()
cat = Cat()

# 调用make_sound函数,实现多态性
print(make_sound(dog)) # 输出:Woof
print(make_sound(cat)) # 输出:Meow

封装

封装是指将类的属性和方法封装在类的内部,外部无法直接访问。通过封装,可以保护类的属性和方法,做到别人只能通过类的接口来访问类的属性和方法。

在 Python 中,通过在属性和方法的名称前面两个下划线 __ 来实现封装。

在 Python 中,用 __ 来表示私有属性或方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person:
def __init__(self, name: str, age: int):
self._name = name
self._age = age
self.__secret = "I am a secret!"

def get_name(self):
return self._name

def get_age(self):
return self._age

obj = Person("Tom", 18)

print(obj._name) # Tom
print(obj._age) # 18
print(obj.__secret) # 会报错

 评论
评论插件加载失败
正在加载评论插件