Python中的访问修饰符:公共、私有和受保护的
访问修饰符被面向对象编程语言(如C++、Java、Python等)用于限制类成员变量和方法从类外部的访问。封装是一种OOPs原则,它使用公共、私有和受保护的访问修饰符来保护类的内部数据。
Python支持三种类型的访问修饰符,即公共、私有和受保护。这些访问修饰符对类的成员变量和方法从任何对象外部的访问提供了限制。
公共访问修饰符
默认情况下,成员变量和方法为公共访问,这意味着它们可以从类外部或内部的任何地方访问。不需要任何公共关键字来使类、方法和属性为公共。以下是公共访问修饰符的示例:
示例
Student类具有两个成员变量name和age,以及一个显示成员变量值的display方法。由于没有为它们指定特定的关键字,因此这些变量和方法都是公共的。
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def display(self):
print("Name:", self.name)
print("Age:", self.age)
s = Student("John", 20)
s.display()
输出
Name: John
Age: 20
私有访问修饰符
具有私有访问修饰符的类属性和方法只能在定义它们的类中访问,不能在类外部访问。在Python中,私有属性和方法是通过在它们的声明前添加两个下划线(“__”)前缀来声明的。
示例
BankAccount类被声明为具有两个私有变量account_number和balance以及一个私有属性display_balance,该属性打印银行账户的余额。由于这两个属性和方法都是私有的,因此在从类外部访问它们时会引发AttributeError。
class BankAccount:
def __init__(self, account_number, balance):
self.__account_number = account_number
self.__balance = balance
def __display_balance(self):
print("Balance:", self.__balance)
b = BankAccount(1234567890, 5000)
b.__display_balance()
输出
AttributeError: 'BankAccount' object has no attribute '__display_balance'
受保护的访问修饰符
具有受保护的访问修饰符的类属性和方法可以在类内部和从继承受保护类的类中访问。在Python中,使用单下划线(“_”)作为它们的名称前缀来声明受保护的成员和方法。
示例
Person类具有两个受保护属性_name和_age以及一个受保护方法_display,该方法显示person类的属性值。Student类从Person类继承,具有一个额外的受保护属性_roll_number和一个公共方法display,该方法通过创建Student类的实例来调用父类即Person类的受保护_display方法来显示_display方法的值。我们可以从类外部访问display方法,因为它是私有方法,它调用了Person类的受保护_display方法。
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def _display(self):
print("Name:", self._name)
print("Age:", self._age)
class Student(Person):
def __init__(self, name, age, roll_number):
super().__init__(name, age)
self._roll_number = roll_number
def display(self):
self._display()
print("Roll Number:", self._roll_number)
s = Student("John", 20, 123)
s.display()
输出
Name: John
Age: 20
Roll Number: 123
结论
在本文中,我们了解了Python和其他OOPs语言用于数据隐藏和保护的三种访问修饰符。公共、私有和受保护是Python中使用的三种访问修饰符。类的公共属性和方法可以从类外部或内部的任何地方访问。只能从声明属性和方法的类内部访问私有成员变量和属性。当我们需要从类内部和继承自该类的类中访问类的属性和方法时,使用受保护的访问修饰符。