- __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 __ 指类型
-
__ init __方法是类实例创建之后调用, 对当前对象的实例的一些初始化, 没有返回值
class Demo: def __init__(self,x): #类的初始化 self.x = x obj = Demo(50) print(obj.x) #运行结果 50
-
__ new __方法是创建类实例的方法, 创建对象时调用, 返回当前对象的一个实例。旧式类没有该方法 。
class Demo: def __new__(cls, *args, **kwargs): return '创建一个对象' obj = Demo() #当实例化一个对象的时候,调用的就是__new__方法 print(obj) #运行结果 创建一个对象
-
__ 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}
-
__ 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__
-
__ name __ 是标识模块的名字的一个系统变量
__ module __ 是运行当前文件时,该文件的模块名字
如果模块是被导入,__ name __ 的值为模块名字
如果模块是被直接执行,__ name __ 的值为’__ main __’#同一目录下建立A,B两个python文件,在B文件中运行下面代码 import A def bprint(): print('__name__ = ',__name__) bprint() print(A.__name__) #运行结果 __name__ = __main__ A
-
__ repr __ 和__ str __ 这两个方法都是用于显示的,__ str __ 是面向用户的,而__ repr __面向程序员。
打印操作会首先尝试__ str 和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。
__ repr __ 用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用 str __,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
当我们想所有环境下都统一显示的话,可以重构repr方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用str,而程序员在开发期间则使用底层的repr来显示,实际上str只是覆盖了repr以得到更友好的用户显示。
参考
- __ call __ 用于实例自身的调用