前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python面向对象编程-公有、私有和保护成员

Python面向对象编程-公有、私有和保护成员

原创
作者头像
玖叁叁
发布2023-04-19 08:54:56
8540
发布2023-04-19 08:54:56
举报
文章被收录于专栏:玖叁叁

在Python中,对象是通过类定义的。类中的成员变量和成员函数可以是公有的、私有的或保护的。这些成员变量和成员函数的访问权限控制了对象的封装性,可以避免对象中的数据被不良操作修改或误用,提高代码的可读性和可维护性。

访问权限

在Python中,成员的访问权限可以通过名称前的下划线来控制,下划线的个数决定了访问权限的级别。

  • 一个下划线(_):表示该成员是保护的,外部可以访问但不应该修改或删除。
  • 两个下划线(__):表示该成员是私有的,只能在类内部访问,外部不能访问或修改。

在Python中,实际上没有严格的访问控制,这些下划线只是一种命名惯例,用于告诉开发人员哪些成员应该被视为公共的、保护的或私有的。

示例

下面我们通过一个简单的示例来演示Python中公有、私有和保护成员的使用。

代码语言:javascript
复制
pythonCopy codeclass Person:
    def __init__(self, name, age, id_number):
        self.name = name    # 公有成员
        self._age = age     # 保护成员
        self.__id_number = id_number   # 私有成员

    def display_info(self):
        print("Name:", self.name)
        print("Age:", self._age)
        print("ID Number:", self.__id_number)

class Student(Person):
    def __init__(self, name, age, id_number, grade):
        Person.__init__(self, name, age, id_number)
        self.grade = grade

    def display_info(self):
        Person.display_info(self)
        print("Grade:", self.grade)

p = Person("Tom", 20, "123456")
p.display_info()
print()

s = Student("Mike", 18, "654321", "Grade 10")
s.display_info()

在上面的代码中,我们定义了一个基类 Person 和一个派生类 Student。在 Person 类中,我们定义了三个成员变量,分别是 name_age__id_number。其中,name 是公有的成员变量,可以被类的外部访问;_age 是保护成员变量,可以被类的派生类访问,但不应该被类的外部访问;__id_number 是私有成员变量,只能在类的内部访问。

Person 类中,我们定义了一个 display_info 方法,它用于打印 Person 对象的信息。在 Student 类中,我们继承了Person 类,并定义了一个新的成员变量 grade。我们还覆盖了 display_info 方法,以便在输出 Person 对象的信息后,打印学生的年级信息。

在上面的示例中,我们创建了一个 Person 对象 p 和一个 Student 对象 s。我们可以看到,display_info 方法可以访问 Person 类中的公有、保护和私有成员变量,但是,我们无法在外部访问私有成员变量 __id_number

代码语言:javascript
复制
Name: Tom
Age: 20
ID Number: 123456

Name: Mike
Age: 18
ID Number: 654321
Grade: Grade 10

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 访问权限
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档