Python 访问修饰符:公共、私有和受保护
访问修饰符被面向对象的编程语言如C++、Java、Python等使用,以限制类成员变量和方法对类外部的访问。封装是一种面向对象的编程原则,使用访问修饰符(如公共、私有和受保护)来保护类的内部数据。
Python支持三种类型的访问修饰符,即公共、私有和受保护。这些访问修饰符对于从类外部的任何对象访问类的成员变量和方法提供了限制。
公共访问修饰符
默认情况下,成员变量和方法是公共的,这意味着它们可以从类的内部和外部的任何地方访问。不需要使用public关键字来使类、方法和属性成为公共的。以下是公共访问修饰符的示例:
示例:
学生类有两个成员变量,名字和年龄,以及一个打印成员变量值的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,用于打印银行账户的余额。由于属性和方法都是私有的,因此在从类外部访问它们时会引发Attribute error错误。
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类继承,具有额外的受保护属性_rol
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和其他面向对象编程语言中的数据隐藏和保护。公共(Public),私有(private)和受保护(protected)是Python中使用的三种访问修饰符。类的公共属性和方法可以从类的内部或外部的任何地方进行访问。私有成员变量和属性只能从声明了这些属性和方法的类内部进行访问。当我们需要从类的内部以及从继承自该类的类中访问类的属性和方法时,使用受保护的访问修饰符。