• 14、私有数据


    Python 程序员不去依赖语言特性去封装数据,而是通过遵循一定的属性和方法命名规约来达到这个效果。第一个约定是任何以单下划线 开头的名字都应该是内部实现。比如: 

    class A:
        def __init__(self):
            self._internal = 0 # An internal attribute
            self.public = 1 # A public attribute
        def public_method(self):
            '''
            A public method
            '''
            pass
        def _internal_method(self):
            pass            

    Python 并不会真的阻止别人访问内部名称。但是如果你这么做肯定是不好的,可能会导致脆弱的代码。同时还要注意到,使用下划线开头的约定同样适用于模块名和模块级别函数。例如,如果你看到某个模块名以单下划线开头 (比如 _socket),那它就是内部实现。类似的,模块级别函数比如 sys._getframe() 在使用的时候就得加倍小心了。
    你还可能会遇到在类定义中使用两个下划线 (__) 开头的命名。比如:

    class B:
      def __init__(self):
        self.__private = 0
      def __private_method(self):
        pass
      def public_method(self):
        pass
        self.__private_method()

    使用双下划线开始会导致访问名称变成其他形式。比如,在前面的类 B 中,私有属性会被分别重命名为 _B__private 和 _B__private_method 。这时候你可能会问这样重命名的目的是什么,答案就是继承——这种属性通过继承是无法被覆盖的。比如: 

    class C(B):
      def __init__(self):
        super().__init__()
        self.__private = 1 # Does not override B.__private
        # Does not override B.__private_method()
      def __private_method(self):
        pass

     这里,私有名称 __private __private_method 被重命名为 _C__private 和_C__private_method ,这个跟父类 中的名称是完全不同的。 

  • 相关阅读:
    Typora入门使用
    什么是Structed Streaming?
    Spark的join什么情况下可以避免shuffle?
    spark Executor启动过程分析
    在IDEA中使用Git
    Git和SVN的区别
    Flink on Yarn的两种模式
    如何查看执行计划
    SQL Server 堆表与栈表的对比(大表)
    SQL Server中CURD语句的锁流程分析
  • 原文地址:https://www.cnblogs.com/lixiaofou/p/8278498.html
Copyright © 2020-2023  润新知