python类的双下滑线方法

  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 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,239评论 4 16
  • 隔着屏幕,你不知道我有多生气,不知道我有多无奈, 呵,我却还庆幸,还好你不知道!
    雪落残月阅读 161评论 0 0
  • 天空飘来五个字儿 那都不是事儿 是事儿也就烦一会儿 一会儿就没事儿 猴子掰玉米的经典寓言 现在搁在烦恼上 烦恼即使...
    羽杉儿阅读 442评论 0 0
  • 庄严,古朴,静谧,安详:再也找不到更贴切的词语来形容北京的胡同了,它或许简朴但不陋俗,简约却不单调。清晨的阳光晴朗...
    梦想_aabb阅读 423评论 0 0