首页 > 编程知识 正文

Python类成员访问权限用法介绍

时间:2023-11-20 05:03:32 阅读:287974 作者:WJKB

在Python中,类成员的访问权限是一个非常重要的概念。它涉及到了程序的封装性和可维护性。本文将从多个方面对Python类成员访问权限进行详细的阐述,并给出对应的代码示例。

一、公有成员

公有成员是指通过类对象、实例对象都可以访问的成员。在Python中,默认情况下,所有的类成员都是公有的。下面是一个简单的代码示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def get_name(self):
        return self.name
    
    def get_age(self):
        return self.age

p = Person("Tom", 18)
print(p.get_name())
print(p.get_age())

在上面的代码中,name和age属性以及get_name和get_age方法都是类的公有成员,可以通过实例对象进行访问。

二、私有成员

私有成员是指不能在类的外部直接访问的成员。在Python中,可以通过在成员名称前加上两个下划线来将其设为私有成员。下面是一个简单的代码示例:

class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
        
    def __get_name(self):
        return self.__name
    
    def __get_age(self):
        return self.__age

p = Person("Tom", 18)
print(p.__get_name())  # 这里会报错,因为__get_name是私有成员
print(p.__get_age())   # 这里会报错,因为__get_age是私有成员

在上面的代码中,__name和__age属性以及__get_name和__get_age方法都是类的私有成员,不能通过实例对象直接访问。

虽然不能直接访问私有成员,但是Python提供了一种名为“名字重整(Name Mangling)”的机制,用来访问私有成员。可以通过在成员名称前加上一个下划线和类名来访问私有成员。下面是一个简单的代码示例:

class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
        
    def __get_name(self):
        return self.__name
    
    def __get_age(self):
        return self.__age

p = Person("Tom", 18)
print(p._Person__get_name())  # 这里会输出Tom,因为_Person__get_name被重命名为_Person__get_name
print(p._Person__get_age())   # 这里会输出18,因为_Person__get_age被重命名为_Person__get_age

在上面的代码中,通过在成员名称前加上_Person来访问私有成员。

三、保护成员

保护成员是指只能在类的内部以及子类中访问的成员。在Python中,可以通过在成员名称前加上一个下划线来将其设为保护成员。下面是一个简单的代码示例:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
        
    def _get_name(self):
        return self._name
    
    def _get_age(self):
        return self._age

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self._grade = grade
        
    def get_grade(self):
        return self._grade

s = Student("Tom", 18, 3)
print(s._get_age())    # 在子类中可以访问父类的保护成员
print(s._get_name())   # 在子类中可以访问父类的保护成员
print(s.get_grade())

在上面的代码中,_name和_age属性以及_get_name和_get_age方法都是类的保护成员,在子类中可以通过继承进行访问。

四、总结

在Python中,类成员的访问权限是通过成员名称前加上一个或两个下划线来决定的。公有成员是可以在类的内部、子类和类的外部进行访问的,私有成员只能在类的内部进行访问,但是可以通过名字重整机制访问,保护成员则只能在类的内部以及子类中访问。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。