龙空技术网

python是怎么实现方法的访问控制(public, protected, private)?

Inspiration 273

前言:

目前小伙伴们对“python公共方法”大体比较关切,你们都想要剖析一些“python公共方法”的相关文章。那么小编在网络上搜集了一些关于“python公共方法””的相关知识,希望大家能喜欢,兄弟们快快来了解一下吧!

在Python中,访问修饰符(如public,private和protected)是通过命名惯例而不是语言强制的访问修饰符来实现的,与其他面向对象的编程语言不同。

私有变量(private): 双下划线

按惯例,希望将实例变量设为私有的变量名称应以双下划线(__)为前缀。例如,如果在类中定义了一个实例变量__x,则它将被视为私有变量,无法从类外直接访问或修改,其名称将被“修饰”(mangled),即在方法名前面添加类名。

例如,如果我们有一个名为 MyClass 的类,其中有一个名为 __my_method() 的私有方法,Python 将自动将方法名修饰为 _MyClass__my_method()。这意味着该方法仍然可以使用其原始名称从类内部访问,但在类外部必须使用修饰后的名称访问。

受保护变量(protected): 单下划线

同样,希望将实例变量设为受保护的变量应以单下划线(_)为前缀。按约定,这些变量不应从类外访问,但如果必要,仍然可以访问。这只是一个约定,Python并没有对方法名做任何改变。

公共变量(public): 没有任何下划线

最后,没有任何下划线的实例变量被视为公共变量,可以从任何地方访问和修改。

例子

下面是在Python中实现访问控制的命名惯例及其示例:

1.公共(public)

-希望公共的变量和方法不应在名称之前有任何下划线。

-可以从程序的任何地方访问和修改这些变量和方法。

class MyClass:    def public_method(self):        print(“这是一个公共方法。”)        public_var =“这是一个公共变量。”

2.受保护(protected):

-希望受保护的变量和方法在名称之前应该有一个下划线。

-可以从类及其子类访问这些变量和方法,但不能从类层次结构外部访问。

class MyClass:    def _protected_method(self):        print(“这是一个受保护的方法。”)        _protected_var =“这是一个受保护的变量。”

3.私有(private):

-希望私有变量和方法在名称之前应该有两个下划线。

-只能从类内部访问这些变量和方法,而不能从其子类或类层次结构外部访问。

class MyClass:    def __private_method(self):        print(“这是一个私有方法。”)        __private_var =“这是一个私有变量。”

需要注意的是,Python解释器不严格执行这些命名惯例,可以通过名称修改访问私有和受保护的变量和方法,但这并不建议,因为这可能会导致代码变得混乱和难以维护。因此,强烈建议开发人员遵循这些命名惯例以保持代码的可读性和组织性,并使用其他代码组织策略来保护其代码的安全性。

以下是一个示例,展示了如何通过名称修饰访问私有和受保护变量:

class MyClass:     def init(self):       self.__private_var = "这是一个私有变量。"       self._protected_var = "这是一个受保护的变量。"    def __private_method(self):        print("这是一个私有方法。")    def _protected_method(self):        print("这是一个受保护的方法。")    def access_private_and_protected(self):        print("访问私有和受保护变量和方法:")        print(self.__private_var)  # 这将打印私有变量        print(self._protected_var)  # 这将打印受保护变量        self.__private_method()  # 这将调用私有方法        self._protected_method()  # 这将调用受保护方法        my_obj = MyClass()my_obj.access_private_and_protected()print(my_obj._MyClass__private_var) # 这将通过名称修饰打印私有变量print(my_obj._protected_var) # 这将打印受保护变量

在这个例子中,创建了一个MyClass对象,并调用其access_private_and_protected方法。该方法从类内部访问私有和受保护变量和方法。

然后,在类外部,通过在变量名前加上类名和下划线来进行名称修饰以访问私有变量。使用下划线前缀直接访问受保护变量。

但是,通常不建议通过名称修饰访问私有和受保护变量和方法,因为这可能会使代码更难以阅读和维护。

标签: #python公共方法