【查漏补缺】Python单例、异常和模块81~100

作者: TensorFlow开发者 | 来源:发表于2019-03-03 00:34 被阅读26次

    81.类方法定义的注意点有二:一,类方法定义必须用装饰器@classmethod来修饰,来告诉解释器这是一个类方法。二,类方法第一个参数必须是cls,以便在类方法内部可以访问类的其他类属性或类方法。

    说明:在装饰器@classmethod的基础上,开发工具通常会自动为开发者补齐cls参数。

    82.静态方法:当一个方法不需要访问实例属性也不访问类属性时,则可以把该方法定义成静态方法。

    83.静态方法:定义有2点要注意:一,静态方法定义必须用装饰器@staticmethod来修饰,来告诉解释器这是一个静态方法。二,静态方法第一个参数不再是self、cls,因为在静态方法内部不需要再访问类属性或实例属性。

    84.__new__( )是object内置的一个静态方法。该方法会为对象分配内存空间,并返回对象的引用。Python解释器拿到对象的引用,将引用作为第一个参数传递给__init__()方法。

    85.__new__( )在创建对象时,会自动被调用。如果重写该方法,一定记得调用并返回分配的引用super().__new__(cls)。否则,创建的对象既没有内存地址,更没有初始化。

    86.单例:

        class Abc(object):
            # 用来记录第一个被创建对象的引用
            instance = None
            def __new__(cls, *args, **kwargs):
                if cls.instance is None:
                    cls.instance = super().__new__(cls)
                return cls.instance
    

    87.Python单例设计优化:我们无法控制系统调用初始化方法,但可以添加一个类属性,控制初始化方法中的初始化动作。

    88.异常:else:只有在没有捕捉到异常时才会调用。finally:不管有没有捕捉到异常,都会调用。

        try:
        except AaaError:
        except (BbbError, CccError):
        except Except as result:
        else:
        finally:
    

    89.异常的传递,当函数/方法的执行过程中出现了异常,会先将异常传递给函数/方法的调用一方。如果层层传递,传到主程序,仍然没有处理异常,则此时程序会终止。

    90.基于异常的传递,我们可以在主函数增加异常捕捉。

    91.抛出异常:先创建一个Except("异常描述说明")类的对象,然后raise抛出异常即可。

    92.尽管可以一次性导入多个模块,模块名之间用逗号分割即可,但不推荐这么干。

    推荐的做法:在导入模块时,每个导入应该独占一行。

    93.可以在导入模块的同时,给模块起一个别名,别名推荐使用大驼峰命名法。使用时,要加上:模块名.或者别名.。
    import xxxxx as XxxYyy

    94.from xxx import yyy从xxx模块导入部分的变量、类、函数等,就可以用这种方式导入。用from导入后,可以直接使用。

    95.如果从两个不同的模块中导入了相同的函数,则后导入的函数会覆盖先导入的同名函数。

    一旦发现有冲突,可以给导入的起个别名即可解决。

    96.from xxx import *同样可以一次性导入xxx模块中的所有内容,且使用时不需要加模块名.,但不推荐此导入方式,因为出现导入冲突时,很难排查。

    97.模块的查找顺序:会优先在当前工作目录下去查找要导入的模块,找不到再去找系统目录下提供的模块。

    98.Python中每一个模块都有一个内置属性__file__,可以查看模块的完整路径。

    99.每一个独立的py文件都是一个模块。

    100.在导入模块文件时,被导入的模块中所有可以被直接执行的代码都会被执行一遍,这一点要特别注意。

    相关文章

      网友评论

        本文标题:【查漏补缺】Python单例、异常和模块81~100

        本文链接:https://www.haomeiwen.com/subject/dkluuqtx.html