您的位置:

使用 Python 创建类

介绍

类是 Python 中一种非常重要的概念,它是一种封装数据以及数据相关行为的方式。比如 Python 内置的 str 类型,它通常包括了一些可以用于处理字符串的方法(如split、replace等),同时还可以存储字符串本身。

在 Python 中,定义一个新的类比其他语言要容易得多,这得益于 Python 的面向对象特性。在这篇文章中,我们将会一步步介绍如何用 Python 创建类。

创建类

定义一个简单的类

在 Python 中,使用 class 关键字定义一个类:

class MyClass:
    pass

这是一个非常基本的类,它不包含任何方法或属性,在类定义中使用 pass 表示占位符(用于未来将要写入的代码)。现在我们可以使用这个类来创建新的对象。

my_obj = MyClass()

这将会创建一个新的 MyClass 对象 my_obj。

给类添加属性

一个类可以包含属性,这些属性可以用于存储对象的状态。在 Python 中,添加一个类属性是非常容易的:

class MyClass:
    x = 0

这个 MyClass 类现在有一个属性 x,这个属性的默认值为 0。

给类添加方法

方法是类中的一个函数。方法可以访问和操作其所属类的属性。在 Python 中添加一个方法是非常容易的:

class MyClass:
    x = 0

    def add_one_to_x(self):
        self.x += 1

定义一个 add_one_to_x 方法,它将类属性 x 的值加1。需要注意的是,Python 的每个方法都要用 self 参数,它表示对象本身。这个 add_one_to_x 方法就可以在 MyClass 对象上调用了:

my_obj = MyClass()
my_obj.add_one_to_x()
print(my_obj.x)  # 打印 1

继承

继承是 Python 中的一种重要的编程概念。它指的是一个类可以从另一个类中继承属性和方法。在 Python 中,使用父类名称列表来定义一个子类:

class Vehicle:
    def __init__(self, speed):
        self.speed = speed

    def drive(self):
        print('Driving...')

class Car(Vehicle):
    pass

这里定义了一个名为 Vehicle 的类,它包含了一个 __init__ 方法用于初始化类变量 speed,以及一个 drive 方法用于模拟驾驶汽车。然后我们使用 class Car(Vehicle) 定义了一个子类 Car,它从 Vehicle 类中继承了上述方法。

现在我们可以创建 Car 对象并调用继承来的方法:

my_car = Car(60)
print(my_car.speed)  # 打印 60
my_car.drive()

封装

类提供了一种封装数据的方式, 编写人员可以隐藏并限制类的一些属性和方法,防止被意外修改或使用。Python中默认情况下没有访问限制,但是我们可以使用下划线定义数据成员的访问权限。

私有变量

对于对象的私有变量和方法,Python 采用了一种命名约定,以实现伪私有的效果。Python 将以双下划线(__)开头的属性和方法视为私有的,从而限制了其它代码访问它们。 如果要从外部访问这些属性和方法,可以使用“_类名__属性名/方法名”这样的方式来做(但这是不推荐的做法)。

class MySecretClass:
    __password = '123456'

    def greet(self):
        print('Hello World!')

    def get_password(self):
        return self.__password

my_obj = MySecretClass()
print(my_obj.get_password())  # 打印 123456

属性 __password 被定义成私有的,这意味着它只能从类内部访问,不能从外部访问。但是我们可以通过公有方法 get_password 来获取密码。

保护变量

与私有变量相比,受保护的变量在属性名之前只使用一个下划线。受保护的变量不应被从类的外部使用,但是可以被其子类使用。

class MyProtectedClass:
    _password = '123456'

    def greet(self):
        print('Hello World!')

    def get_password(self):
        return self._password

class MySubClass(MyProtectedClass):
    def show_password(self):
        print(self._password)

my_obj = MySubClass()
print(my_obj.get_password())  # 打印 123456
my_obj.show_password()  # 打印 123456

在这个例子中,使用一个受保护的变量 _password。MySubClass 子类能够访问父类的受保护属性(因为它是受保护的,而不是私有的), 所以我们可以从 MySubClass 实例中访问和修改它。

类方法和静态方法

类方法和静态方法是 Python 中的两种特殊类型的方法。

类方法

类方法是从类中调用,并且被所有实例共享的方法。定义一个类方法时,需要在方法上方添加 @classmethod 装饰器。

class MyClass:
    x = 0

    @classmethod
    def add_one_to_x(cls):
        cls.x += 1

my_obj = MyClass()
MyClass.add_one_to_x()
print(my_obj.x)  # 打印 1

在这个例子中,我们使用了 @classmethod 装饰器来定义了一个叫做 add_one_to_x 的类方法,它将类属性 x 的值加1。注意,类方法可以像通常的方法一样通过类或实例调用,无论是哪一种方式,都具有相同的多态性。

静态方法

静态方法是一种与类相关但与实例无关的方法。这些方法不会访问任何类或实例级别的数据。使用 @staticmethod 装饰器定义一个静态方法。

class MyClass:
    @staticmethod
    def say_hello():
        print("Hello, World!")

MyClass.say_hello()

在这个示例中,我们定义了一个静态方法 say_hello(),该方法不访问类的任何内容,也不访问实例级别数据,因此,我们可以在类无需实例化的情况下调用它。

总结

Python 中创建类是一件非常容易的事情,并且使用面向对象编程技术的 Python 代码通常易于阅读和维护。在这篇文章中,我们从多个角度介绍了使用 Python 创建类,包括:定义简单的类、类属性、类方法、实例方法、静态方法,继承、封装等基础概念的使用。

小标题列表

  1. 定义一个简单的类

  2. 给类添加属性

  3. 给类添加方法

  4. 继承

  5. 私有变量

  6. 保护变量

  7. 类方法

  8. 静态方法