iOS开发人员如何学习Python编程22-补充1

语言: CN / TW / HK

这是我参与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__()方法内部代码。

对象创建执行顺序

  1. 通过__new__()方法创建对象;
  2. 并将对象返回,传给__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__创建对象的方法。