iOS开发人员如何学习Python编程22-补充1
这是我参与11月更文挑战的22天,活动详情查看:2021最后一次更文挑战。
程序主入口
很多时候,我们经常在python
程序中看到这么一行语句:
if __name__ == '__main__'
1. __name__
是所有模块都会有的一个内置属性。
2. 一个模块的__name__
值取决于你如何调用模块。
假如你有一个test.py
文件,如果在a.py
文件中使用import
导入这个模块import test.py
,那么test.py
模块的__name__
属性的值就是test
,不带路径或者文件扩展名。
其实顺序执行,简单来说就是代码按照从上到下的顺序来执行。
魔法方法
在Python
中,有一些内置好的特定方法,这些方法在进行特定的操作时会自动被调用,称为魔法方法。\
魔法方法的命名总是被双下划线包围:
- __名称__
常用魔法方法
1. __doc__
__doc__
用来查看类的说明文档:
print(list().__doc__)
- 查看自定义类的说明文档:
```
class Demo(object):
"""
我是注释
"""
pass
d = Demo() print(d.doc) ```
2. __module__
__module__
用来查看当前操作的类所在模块。当执行模块是类所在模块时,执行结果为__main__
。否则,执行结果是类所在模块的名称。
3. __class__
__class__
用来查看当前对象的类。
4. __dict__
__dict__
用于获取类或者实例的属性字典
⚠️注意:
- 普通字段存储在对象中,所以通过
对象.__dict__
获取的是普通字段 - 除普通字段以外的成员都存储在类中,所以通过
类.__dict__
来获取。
5. __del__()
__del__()
方法也叫做析构方法。当由该类创建的实例对象,被删除或者说在内存中被释放,将会自动触发执行。
⚠️注意:
- 当代码全部执行完毕才自动触发
__del__()
- 如果需要提前触发,则需要通过
del
关键字,删除所有对象后触发__del__()
- 此方法一般不需要定义,因为
Python
是一门高级语言,程序员在使用时无需关心内存的分配与释放,一般都是交给Python
解释器来执行。所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行。
6. __call__()
__call__()
方法用于将对象变成一个可调用的对象。也就是说,当一个类中有__call__()
方法时,其实例化得到的对象便是可调用的(callable
):
```
class Demo(object):
pass
d = Demo()
d() # TypeError: 'Demo' object is not callable
class Demo(object):
pass
d = Demo() d() # TypeError: 'Demo' object is not callable ```
7. __new__()
__new__()
方法用于创建与返回一个对象。在类准备将自身实例化时调用:
``` class Demo(object): def init(self): print("init")
def __new__(cls, *args, **kwargs):
print("__new__")
d = Demo() ```
⚠️注意:
__new__()
方法用于创建对象;__init__()
方法在对象创建的时候,自动调用;- 但是此处重写了父类的
__new__()
方法,覆盖了父类__new__()
创建对象的功能,所以对象并没有创建成功。所以仅执行__new__()
方法内部代码。
对象创建执行顺序
- 通过
__new__()
方法创建对象; - 并将对象返回,传给
__init__()
。
``` class Demo(object): def init(self): print("init")
def __new__(cls, *args, **kwargs):
print("__new__")
return super().__new__(cls)
d = Demo() ```
⚠️注意:
- 在创建对象时,一定要将对象返回,在会自动触发
__init__()
方法; __init__()
方法当中的self
,实际上就是__new__
返回的实例,也就是该对象;__init__()
与__new__()
区别;__init__
实例方法,__new__
静态方法;__init__
在对象创建后自动调用,__new__
创建对象的方法。