__doc__
模块本身是一个对象,而每个对象都会有一个__doc__属性。该属性用描述该对象的作用。
#__doc__的作用
class Demo(object):
"""这是一个简单的例子"""
def test(self):
"""这是一个实例对象的方法"""
print("life is short,you need python!")
def test2(self):
print("never old to lenrn")
print(Demo.__doc__)
print(Demo.test.__doc__)
print(Demo.test2.__doc__)
输出结果如下:
这是一个简单的例子
这是一个实例对象的方法
None
即会输出对这个对象的描述信息,如果没有给对象设置描述信息,则会返回None
__name__
经常都在使用if __name__ == ‘__main__’:,那么这句话到底是什么意思,__name__又有什么含义呢?来看一个例子:创建一个名字为test.py 的文件
def test_fun():
if __name__ == '__main__':
print('I am in my domain,my name is %s' % __name__)
else:
print('Someone else calls me!,my name is %s' % __name__)
test_fun()
运行结果为:
I am in my domain,my name is __main__
再继续创建一个程序名字为import_test.py文件,在这个程序里面将test.py当做一个模块来导入使用,如下:
import test
test.test_fun()
运行结果如下:
Someone else calls me!,my name is test
Someone else calls me!,my name is test
你会发现,Someone else calls me!,my name is test被打印了两遍,第一次打印是在import test的时候,第二次打印是在执行test.test_fun()的时候打印的。以上两个程序,打印出来的__name__的结果不一样,从之前的__main__变成了test。__name__这个系统变量显示了当前模块执行过程中的名称,如果当前程序运行在这个模块中,__name__ 的名称就是__main__如果不是,则为这个模块的名称。
__module__和__class__
__module__表示当前操作的对象在哪个模块
__class__表示当前操作的对象是由哪个类创建的
创建一个test.py文件
class Person(object):
def __init__(self):
self.name='laowang'
在创建一个main.py文件
from test import Person
boj=Person()
print(obj.__module__)
print(obj.__class__)
输出结果为:
test
<class 'test.Person'>
分别打印出当前对象所在模块名和当前对象是由哪个类创建的
__init__和__new__
__new__ 用来创建一个对象的时候自动调用的方法,__init__为对象初始化的时候自动调用的方法。二者有什么不同呢?执行顺序是什么呢?请看例子:
class Person(object):
def __new__(cls, name, age):
print('__new__ called.')
return super().__new__(cls)
def __init__(self, name, age):
print('__init__ called.')
self.name = name
self.age = age
if __name__ == '__main__':
piglei = Person('piglei', 24)
print(piglei)
运行结果为:
__new__ called.
__init__ called.
可以发现,在创建一个对象的时候,是先执行__new__方法,然后再去执行__init__方法,new是创建对象,init是对这个对象进行初始化操作