python的私有和受保护访问修饰符

access-modifiers的Python项目详细描述


python的访问修饰符

Build StatusPyPI

这个包为python提供了两个访问修饰符:私有方法和受保护方法。目标是能够将方法记录为私有的或受保护的,并提供基本的保护,防止意外地从允许的范围之外调用私有的和受保护的方法。

如何使用

私有方法的示例用法:

fromaccess_modifiersimportprivatemethodclassClass:@privatemethoddefprivate_method(self)->str:return"private method"defpublic_method(self)->str:return"public method calls "+self.private_method()c=Class()print(c.public_method())# Prints "public method calls private method"print(c.private_method())# Raises an exception

受保护方法的示例用法:

fromaccess_modifiersimportprotectedmethodclassClass:@protectedmethoddefprotected_method(self)->str:return"protected method"defpublic_method(self)->str:return"public method calls "+self.protected_method()classSubclass(Class):@protectedmethoddefprotected_method(self)->str:return"overridden protected method calls "+super().protected_method()c=Subclass()print(c.public_method())# Prints "public method calls overridden protected method calls protected method"print(c.protected_method())# Raises an exception

私有方法可以与静态方法相结合。注意顺序很重要:staticmethod应该是最外层的装饰器。

fromaccess_modifiersimportprivatemethodclassClass:@staticmethod@privatemethoddefstatic_private_method()->str:return"static private method"defpublic_method(self)->str:return"public method calls "+self.static_private_method()c=Class()print(c.public_method())# Prints "public method calls static private method"print(c.static_private_method())# Raises an exception

不支持将受保护的方法与静态方法组合。还不支持将访问修饰符与类方法结合使用。

性能

访问修饰符decorators通过查看调用decorator的代码来决定是否允许它调用该方法。为此,decorators使用cpython的实现细节,比如sys.\u getframe()和代码对象的名称,比如lambdas和modules。这些检查在每个方法调用上完成。因此,有相当大的性能影响。因此,建议在测试期间使用访问修饰符,并在生产中使用access_modifiers.disable()方法关闭它们。请注意,在计算任何访问修饰符装饰符之前,您需要调用此方法,即:

fromaccess_modifiersimportdisable,privatemethoddisable()# This will disable the access checksclassClass:@privatemethoddefprivate_method(self)->str:return"private_method"disable()# Calling disable here will not work, Class.private_method has already been wrapped

安装

该包可从python包索引获得,安装时使用pip install access-modifiers

开发

克隆存储库:git clone git@github.com:fniessink/access-modifiers.git

安装开发依赖项:pip install -r requirements-dev.txt

运行unittests并测量覆盖率(应该始终为100%):ci/unittest.sh

运行pylint(应该得到10分)和mypy(不应该抱怨):ci/quality.sh

该实现由(单元)测试驱动,并具有100%的单元测试语句和分支覆盖率。请查看测试以查看当前涵盖的使用场景。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Dropbox java登录   java如何将“abcd1234”转换为INT1234   java如何实现compareTo()?   java如何查看SWT示例(Eclipse)源代码?   java内存直接映射到字符串   传递字符串时java Android应用程序崩溃   java是将Android游标(sqlite)提取到数组中以在AlertDialog中使用的最有效的方法。建设者   java如何检查udp/多播端口是否打开且可用?   如何在Java中创建弱引用?   java相同的异常针对不同的异常   swing Java JFrame问题与对话框   Eclipse Mars与Maven和SVN之间的java冲突?   如何在Java+swt中将对象停靠到父窗口?   如何区分Java输入类型?   java在Spring批处理中读取一个项目并将项目列表写入文件   java如何减少数据库表行整数值   java NullPointerException,即使对象不为null   如果站点地图的URL数超过maxnumber,则java会将其拆分为多个站点地图   java JFR显示LmaxDisruptor引擎内部的CPU利用率很高