类
在 Python 中,类是一种抽象的数据类型,它是对现实世界中的事物的抽象,和其他编程语言一样,Python 也支持类的定义和使用。
类和实例是两个不同的概念,类是对现实世界中的事物的抽象,而实例是类的具体实现。也就是说,类是一个模板,实例是根据模板创建的对象。比如学生是一个类,而小明,小红是学生类的实例。
定义类
在 Python 中,使用 class
关键字来定义类,语法如下:
1 2 3 4 5
| class ClassName: pass
|
构造函数
构造函数是类的一种特殊方法,它在创建对象时自动调用,用来初始化对象的属性。在 Python 中,构造函数的名称是固定的,即 __init__
,语法如下:
1 2 3 4 5 6
| class ClassName: def __init__(self, parameters): 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): 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) print(obj.age)
print(obj.get_name()) print(obj.get_age())
|
在 Python 中,类的方法第一个参数是 self
,它表示类的实例本身,通过 self
可以访问类的属性和方法。比如在创建了一个 Person
类的实例 obj
之后,通过 obj.get_name()
可以获取 obj
的 name
属性。同样的,通过 obj.name
也可以获取 obj
的 name
属性。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()) print(dog.get_age())
|
在上面的例子中,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"
def make_sound(animal: Animal): return animal.sound()
dog = Dog() cat = Cat()
print(make_sound(dog)) print(make_sound(cat))
|
封装
封装是指将类的属性和方法封装在类的内部,外部无法直接访问。通过封装,可以保护类的属性和方法,做到别人只能通过类的接口来访问类的属性和方法。
在 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) print(obj._age) print(obj.__secret)
|