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__()方法内部代码。

对象创建执行顺序

  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__创建对象的方法。

猜你喜欢

转载自juejin.im/post/7035049395447939108