类
封装
创建类
在 Python 中,可以使用 class 关键字来创建类。类中包含了对象的属性(实例变量)和方法(函数)。比如我们可以创建一个“动物”类可以作为面向对象编程的入门示例。我们会从基本定义开始,逐步增加细节。
class Animal:
pass
class 后面紧接着是类名,我们给动物类起名 Animal,类名通常是大写开头的单词。有时候类名后面会接一个括号,括号中的是新定义的类的父类,后文会演示如何指定父类。如果没有指明父类,表示默认从 Python 预定义的 object 类继承。Python 程序中,所有的类都是 object 类的子孙类。
类的对象
在程序中直接使用一个类的情况是比较少的,多数情况下,我们会为一个类创建一个或数个对象,然后访问对象的属性或方法。在程序中写出类的名字,然后加上一个括号,就可以生成一个新的类的对象。如果在变量赋值表达式的右侧生成新的对象,就可以让变量指向这个新生成的对象:
dog = Animal()
属性
Python 中要区分“类的属性”,和“对象的属性”。在多数其它语言中,这两项是不区分的。
在类中添加一些变量,这些变量就会成为类的属性。比如,我们可以为类添加一个属性 total_animals,用于统计总共创建了多少个动物:
class Animal:
total_animals = 0 # 类变量,跟踪创建的动物数量
dog = Animal()
print(Animal.total_animals) # 输出: 0, 直接使用类名进行访问
print(dog.total_animals) # 输出: 0, 也可以通过实例进行访问
访问类的属性的时候,在类名的后面加一个点号 . 然后加上属性的名字即可。如果类的对象中没有同名的属性,那么通过对象读取这个属性,它会自动返回类的属性的值。比如上面示例中 dog.total_animals,dog 对象并没有 total_animals 属性,但是它会返回 Animal 类相应的属性的值。
对象的属性,可以通过变量赋值语句进行添加,比如,为新生成的对象 dog 添加一个名为 age 的属性:
class Animal:
name = '旺财'
dog = Animal()
dog.age = 3
print(dog.age) # 输出: 3
dog.age 就表示 dog 对象的名为 age 的属性。
在 Python 中,方法是绑定到对象或类的可调用对象,可以通过属性访问的方式调用。关于这一点,我们将在对象的动态访问属性中进行解释。