Python中的访问修饰符:公有「Public」、私有「Private」和受保护「Protected」

1. 访问修饰符介绍

访问修饰符是面向对象编程中的一个重要概念,Python也不例外。Python中的访问修饰符主要有三种,分别是公有、私有和受保护。这三种访问修饰符分别用来控制类的属性和方法在类的外部如何被访问。

1.1 公有「Public」访问修饰符

公有访问修饰符在Python中是默认的修饰符,它表示类中的属性和方法可以被类的外部访问。公有访问修饰符的标识方式是在属性或方法的名称前不加下划线。

下面是一个简单的例子:

class Car:

def __init__(self, make, model, year):

self.make = make

self.model = model

self.year = year

def get_make(self):

return self.make

my_car = Car('Tesla', 'Model 3', '2020')

print(my_car.get_make())

在上面的例子中,Car类中的make、model和year属性以及get_make方法都是公有的,因此可以通过类的外部访问。

1.2 私有「Private」访问修饰符

私有访问修饰符在Python中用双下划线"__"标识,它表示类中的属性和方法不能在类的外部直接访问。

下面是一个简单的例子:

class Car:

def __init__(self, make, model, year):

self.__make = make

self.__model = model

self.__year = year

def __get_make(self):

return self.__make

my_car = Car('Tesla', 'Model 3', '2020')

print(my_car.__get_make())

在上面的例子中,Car类中的make、model和year属性以及get_make方法都是私有的,因此不能通过类的外部直接访问。如果尝试在类的外部访问这些私有属性或方法,将会引发AttributeError异常。

然而,即使属性和方法被标记为私有,Python也允许在类的内部使用它们,只需要使用双下划线和属性或方法名就可以访问到私有属性或方法。

1.3 受保护「Protected」访问修饰符

受保护访问修饰符在Python中用单下划线"_"标识,它表示类中的属性和方法不能在类的外部直接访问,但可以在派生类中使用。

下面是一个简单的例子:

class Car:

def __init__(self, make, model, year):

self._make = make

self._model = model

self._year = year

def _get_make(self):

return self._make

class TeslaCar(Car):

def __init__(self, make, model, year, battery):

Car.__init__(self, make, model, year)

self.__battery = battery

def get_battery(self):

return self.__battery

my_car = TeslaCar('Tesla', 'Model 3', '2020', '75 kWh')

print(my_car._get_make())

print(my_car.get_battery())

在上面的例子中,Car类中的make、model和year属性以及get_make方法都是受保护的,因此不能通过类的外部直接访问,但是可以在派生类中使用。TeslaCar类继承了Car类,并在其中使用了Car类中的受保护属性和方法。

2. 访问修饰符的使用

2.1 为什么要使用访问修饰符

访问修饰符的主要作用是封装,它可以将类的实现细节隐藏起来,防止外部代码不经意间修改类的内部状态。同时,访问修饰符还可以帮助我们写出更加安全、清晰和易于维护的代码。

下面是一个简单的例子,说明使用访问修饰符的好处:

class BankAccount:

def __init__(self, account_number, account_holder_name, account_balance):

self.__account_number = account_number

self.__account_holder_name = account_holder_name

self.__account_balance = account_balance

def deposit(self, amount):

if amount > 0:

self.__account_balance += amount

def withdraw(self, amount):

if amount > 0 and self.__account_balance >= amount:

self.__account_balance -= amount

def get_balance(self):

return self.__account_balance

my_account = BankAccount('123456789', 'John Smith', 500)

my_account.withdraw(200)

print(my_account.get_balance())

在上面的例子中,BankAccount类中的所有属性都被标记为私有,这样就可以防止外部代码直接修改账户的余额。同时,BankAccount类中的withdraw方法也做了安全性检查,防止账户余额被取为负数。这些都是访问修饰符的好处。

2.2 如何使用访问修饰符

在Python中,访问修饰符是由命名规则来实现的,也就是说,使用不同的命名方式来表示不同的访问权限。

其中,公有访问修饰符是默认的,它不需要特殊的命名方式来标识。

私有访问修饰符使用双下划线"__"开头命名的属性或方法,例如:

class MyClass:

def __init__(self):

self.__private_attribute = 'private'

def __private_method(self):

return 'private'

my_object = MyClass()

print(my_object.__private_attribute)

print(my_object.__private_method())

在上面的例子中,__private_attribute和__private_method都是私有的,因此不能通过my_object.__private_attribute或my_object.__private_method()来直接访问。

受保护访问修饰符使用单下划线"_"开头命名的属性或方法,例如:

class MyClass:

def __init__(self):

self._protected_attribute = 'protected'

def _protected_method(self):

return 'protected'

my_object = MyClass()

print(my_object._protected_attribute)

print(my_object._protected_method())

在上面的例子中,_protected_attribute和_protected_method都是受保护的,因此不能通过my_object._protected_attribute或my_object._protected_method()来直接访问。

3. 总结

本文介绍了Python中的三种访问修饰符:公有、私有和受保护。公有访问修饰符是默认的修饰符,表示类中的属性和方法可以被类的外部访问;私有访问修饰符使用双下划线"__"标识,表示类中的属性和方法不能在类的外部直接访问;受保护访问修饰符使用单下划线"_"标识,表示类中的属性和方法不能在类的外部直接访问,但可以在派生类中使用。

使用访问修饰符可以帮助我们写出更加安全、清晰和易于维护的代码。

后端开发标签