介绍
类是 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 创建类,包括:定义简单的类、类属性、类方法、实例方法、静态方法,继承、封装等基础概念的使用。
小标题列表
定义一个简单的类
给类添加属性
给类添加方法
继承
私有变量
保护变量
类方法
静态方法