前言:
目前小伙伴们对“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公共方法