【Python OOP】类——访问限制

简介: 【Python OOP】类——访问限制

访问限制

私有变量

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线,在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。

例如:

class Student(object):

    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print '%s: %s' % (self.__name, self.__score)

对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score

如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法:

class Student(object):
    ...

    def get_name(self):
        return self.__name

    def get_score(self):
        return self.__score

如果又要允许外部代码修改score怎么办?可以给Student类增加set_score方法:

class Student(object):
    ...

    def set_score(self, score):
        self.__score = score

还可以增加参数检查:

class Student(object):
    ...

    def set_score(self, score):
        if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError('bad score')

特殊变量

在Python中,变量名类似xxx的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用namescore这样的变量名。

有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

私有变量一定不能从外部访问?

双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问name是因为Python解释器对外把name变量改成了_Studentname,所以,仍然可以通过_Studentname来访问__name变量:

>>> bart._Student__name
'Bart Simpson'

但是最好别这么做,因为不同版本的Python解释器可能会把__name改成不同的变量名。

练习

分别编写类内部的私有方法,模块级别的私有方法。

class Test:
    def test(self):
        self.__test()

    def __test(self):
        '''类内部的私有方法'''
        print("test")

def _func():
    '''模块级别的私有方法'''
    print("file private")

if __name__ == '__main__':
    t = Test()
    t.test()
相关文章
|
20天前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
13 1
|
21天前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
17 2
|
28天前
|
设计模式 开发者 Python
Python类里引用其他类
Python类里引用其他类
|
30天前
|
设计模式 开发者 Python
Python 类中引用其他类的实现详解
Python 类中引用其他类的实现详解
26 1
WK
|
24天前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
11 0
|
26天前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
29 0
|
28天前
|
Python
Python中的类(一)
Python中的类(一)
|
28天前
|
Python
Python中的类(一)
Python中的类(一)
|
28天前
|
Python
Python中的类(二)
Python中的类(二)
|
28天前
|
开发者 Python
Python类和子类的小示例:建模农场
Python类和子类的小示例:建模农场