• 在类中封装属性名


    问题:
    
    你想封装类的实例上面的私有数据,但是Python语言并没有访问控制:
    
    class A:
      def __init__(self):
        self._internal = 99 # An internal attribute
        self.public = 88 # A public attribute
    s=A()
    print s
    print type(s)
    print dir(s)
    print s._internal
    print s.public
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a8.py
    <__main__.A instance at 0x025DF4E0>
    <type 'instance'>
    ['__doc__', '__init__', '__module__', '_internal', 'public']
    99
    88
    
    
    class A:
      def __init__(self):
        self._internal = 99 # An internal attribute
        self.public = 88 # A public attribute
      def _internal_method(self,query):
          a=query
          return a
    
    s=A()
    print s
    print type(s)
    print dir(s)
    print s._internal
    print s.public
    print s._internal_method('abc')
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a8.py
    <__main__.A instance at 0x0255F940>
    <type 'instance'>
    ['__doc__', '__init__', '__module__', '_internal', '_internal_method', 'public']
    99
    88
    abc
    
    
    你还可能会遇到在类定义中使用两个下划线__开头的命名,比如:
    
    class B:
      def __init__(self):
          self.__private = 0
      def __private_method(self):
          pass
      def public_method(self):
          pass
          self.__private_method()
    A=B()
    print A
    print type(A)
    print dir(A)
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/cookbook/a9.py
    <__main__.B instance at 0x0257F4E0>
    <type 'instance'>
    ['_B__private', '_B__private_method', '__doc__', '__init__', '__module__', 'public_method']
    
    
    使用双下划线开始会导致访问名称变成其他形式,比如,在前面的类B中,私有属性会被
    
    分别重命名为_B__private 和  _B__private_method 。

  • 相关阅读:
    ora29861:域索引标记为loading/failed/unusable(转载)
    总遇到些莫名奇妙的问题,很不爽!
    dul 10恢复oracle lob数据方法(转载)
    C#用GDAL/OGR库创建与写Shape文件(转载)
    缺陷跟踪系统Mantis之安装篇(转载)
    Oracle10g闪回恢复区详细解析(转载)
    五大最受欢迎的BUG管理系统(转载)
    使用dul恢复数据(转载)
    DUL使用(转载)
    gdul 1.0.2 使用
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349458.html
Copyright © 2020-2023  润新知