美文网首页
python类的双下滑线方法

python类的双下滑线方法

作者: 隐墨留白 | 来源:发表于2018-11-22 17:49 被阅读0次
    1. __class __ 指的是一个对象的类型
    class A:
        def f(self):
            print(self)
            print(__class__)
            print(self.__class__)
        
    a = A()
    a
    <__main__.A object at 0x0000000002F76F60>
    A
    <class '__main__.A'>
    a.f()
    <__main__.A object at 0x0000000002F76F28>
    <class '__main__.A'>
    <class '__main__.A'>
    

    self是对象指针,而__ class __ 指类型

    1. __ init __方法是类实例创建之后调用, 对当前对象的实例的一些初始化, 没有返回值

       class Demo:
           def __init__(self,x):    #类的初始化
               self.x = x
       obj = Demo(50)
       print(obj.x)
      
      #运行结果
      50 
      
    2. __ new __方法是创建类实例的方法, 创建对象时调用, 返回当前对象的一个实例。旧式类没有该方法 。

      class Demo:
         def __new__(cls, *args, **kwargs):
             return '创建一个对象'
      obj = Demo()   #当实例化一个对象的时候,调用的就是__new__方法
      print(obj)
      
      #运行结果
      创建一个对象
      
    3. __ dict __ 类的属性
      类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__ dict __ 里的
      对象的__ dict __中存储了一些self.xxx 属性参数的一些东西

      class Demo:
          def __init__(self,x):
              self.x = x
      obj = Demo(50)
      obj.y = 10
      obj.z = 2
      print(obj.__dict__)
      
      #运行结果
      {'x': 50, 'y': 10, 'z': 2}
      
    4. __ doc __ 文档字符串
      一般而言,是对函数/方法/模块所实现功能的简单描述。但当指向具体对象时,会显示此对象从属的类型的构造函数的文档字符串。

      class Demo:
          """
          Testing the function of __doc__
          """
          pass
      obj = Demo()
      print(Demo.__doc__)
      print(obj.__doc__)
      
      #运行结果
          Testing the function of __doc__
      
          Testing the function of __doc__
      
    5. __ name __ 是标识模块的名字的一个系统变量
      __ module __ 是运行当前文件时,该文件的模块名字
      如果模块是被导入,__ name __ 的值为模块名字
      如果模块是被直接执行,__ name __ 的值为’__ main __’

      #同一目录下建立A,B两个python文件,在B文件中运行下面代码
      import A
      def bprint():
          print('__name__ = ',__name__)
      
      bprint()
      print(A.__name__)
      
      #运行结果
      __name__ =  __main__
      A
      
    6. __ repr __ 和__ str __ 这两个方法都是用于显示的,__ str __ 是面向用户的,而__ repr __面向程序员。

      打印操作会首先尝试__ str 和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。
      __ repr __ 用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用
      str __,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
      当我们想所有环境下都统一显示的话,可以重构repr方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用str,而程序员在开发期间则使用底层的repr来显示,实际上str只是覆盖了repr以得到更友好的用户显示。
      参考

    1. __ call __ 用于实例自身的调用

    相关文章

      网友评论

          本文标题:python类的双下滑线方法

          本文链接:https://www.haomeiwen.com/subject/hjglqqtx.html