• Python学习手册-24~27章


    第24章 高级模块话题

    在模块中隐藏数据

    最小化from * 的破坏:_X__all__

    from *语句只会把列在__all__列表中的这些变量名复制出来。如果没有定义__all__from *就会复制出开头没有下划线的所有变量名。

    _X __all__列表只对from *语句这种形式有效。

    混和用法模式:__name__ __main__

    如果文件以顶层程序文件执行,在启动时,__name__就会设置成字符串”__main__”。

    如果文件被导入,__name__就会改设成客户端了解的模块名。

    __name__充当一个使用模式标志,允许它编写成一个可导入的库和一个顶层脚本。

    __name__进行单元测试

    __name__检查区块内封装了自我测试的调用,使其在文件作为顶层脚本执行时才会启动,而导入则不会。

    使用带有__name__的命令行参数

    import sys

    sys.argv 字符串列表包含了命令行参数,第一项总是将要运行的脚本的名称。

    修改模块的搜索路径

    import sys

    sys.path 在程序启动时就会初始化,如果修改,只在修改的python会话或程序中才会存续,在Python结束后,不会保留下来。PYTHONPATH.pth文件路径配置是保存在操作系统中,而不是执行中的python程序。

    Import语句和from语句的as扩展

    import nodulemane as name

    相当于:

    import modulename

    name = modulename

    del modulename

    from modulename import attrname as name

    用名称字符串导入模块

    modname = “string”

    import modname  #err

    string = __import__(modname)

    模块设计理念

    需要思考哪些函数要放进模块、模块通信机制等。当开始编写较大的Python系统时,就会变得明朗起来。

    模块陷阱

    顶层代码的语句次序的重要性

    在导入时,模块文件顶层的程序代码一旦python运行到时,就会立刻执行。因此,该语句不能引用文件后面的变量名。

    位于函数主体内的代码直到函数被调用到后才会运行。因为函数内的变量名在函数实际执行前都不会解析,通常可以引用文件内任意地方的变量。

    from复制变量名,而不是连接

    from *会让变量语义模糊

    from 语句中明确列出想要的属性,如果使用import而不是from,也可以避开这个问题。

    reload不会影响from导入,且最佳原则就是不要将它们结合起来使用。使用reloadimport

    第25章 OOP:宏伟蓝图

    Python中,OOP完全是可选的,在初级阶段不需要使用类。简单的脚本代码,可以做很多事。^_^

    做长期python产品开发的人对类更感兴趣一些。

    为何使用类

    大的用处:

    继承、组合

    用类建立新对象:

    多重实例、通过继承进行定制、运算符重载

    概览OOP

    属性的继承搜索

    python中大多OOP的用法,都可以简化成object.attribute。用类对象调用这个表达式读取属性或调用对象的方法时,python启动搜索。搜索对象连接的树,来寻找attribute首次出现的对象。由下向上,由左到右。

    类:类是实例工厂,类的属性提供了行为,所有从类产生的实例都继承该类的属性。

    实例:代表程序领域中具体的元素。实例属性记录数据,而每个特定对象的数据都不同。

    类方法调用

    I2.w() 调用映射为C3.w(I2), Python把隐含的实例传进方法中的第一个特殊的参数,习惯上将其称为self.

    编写类树

    每个class语句会生成一个新的类对象。

    每次类调用,就会生成一个新的实例对象。

    实例自动连接到创建了这些实例的类。

    类连接至其超类的方式是,将超类列在类头部的括号内从左到右的顺序会决定树中的次序。

    __init__构造函数

    OOP是为了代码重用

    大体而言,OOP就是在树中搜索属性。

    事实上,应用领域中所谓的软件框架,就是把常见程序设计任务实现成类,可以让你在应用程序中混合。利用软件框架,只需编写子类,填入所需的一两个方法。

    第26章 类代码编写基础

    类对象提供默认行为

    class语句创建类对象并将其赋值给变量名,就像def应用,class语句一般是在其所在文件导入时执行的。

    class语句内的赋值语句会创建类的属性。

    类属性提供对象的状态和行为。类对象的属性可由类所创建的所有实例共享。

    实例对象是具体的元素

    像函数那样调用类对象会创建新的实例对象。

    每个实例对象继承类的属性并获得了自己的命名空间。

    在类方法内对self属性做赋值运算会产生每个实例自己的属性。

    类通过继承经行定制

    超类列在了类开头的括号中。

    类从其超类中继承了属性。

    实例会继承所有可以读取的类的属性。

    每个object.attribute都会开启新的独立搜索。

    逻辑的修改是通过创建子类,而不是修改超类。

    树中较低发生的重新定义的,取代属性的动作称为覆盖。

    类是模块内的属性

    类可以获取python运算符

    运算符可以让类与Python的对象模型相集成。重载类型运算时,以类实现的用户定义对象的行为就会像内置对象一样。因此,提供了一致性,以及与预期接口的兼容性。

    第27章 更多实例

    步骤1:创建实例

    Python中,模块使用小写字母开头,类名使用一个大写字母开头。

    编写构造函数

    实例对象的属性,它们通过给类方法函数中的self属性赋值来创造。在__init__构造函数方法中将它们赋值给self,在每次创建一个实例时,Python会自动运行__init__代码。

    在进行中测试

    在进行中测试比编写大量代码后再一次性测试要更自然。类似UT

    以两种方式使用代码,以免import时运行不必要的测试代码

    class Person:

    def __init__(self,name,job=None,pay=0):

        self.name = name

        self.job = job

        self.pay = pay

    if __name__ == ‘__main__’:

       #self-test code

    步骤2:添加行为方法

    编写方法

    步骤3:运算符重载

    例子,提供打印显示

    步骤4:通过子类定制行为

    编写子类

    扩展方法

    继续、定制和扩展

    步骤5:定制构造函数

    person.py

    from classtools import AttrDisplay

    class Person(AttrDisplay):

    “””

    Create and process person record

    “””

    def __init__(self,name,job=None,pay=0):

        self.name = name

        self.job = job

        self.pay = pay

    def lastName(self):

        return self.name.split()[-1]

    def giveRaise(self,percent):

        self.pay = int(self.pay * (1+percent))

    class Manager(Person):

    “””

    A customized Person with special requirements

    “””

    def __init__(self, name, pay):

        Person.__init__(self, name, ‘mgr’, pay)

    def giveRaise(self, percent, bonus = 0.1)

        Person.giveRaise(self, percent + bonus)

    if __name__ == ‘__main__’:

    #test-code

    bob = Person(‘Bob Smith’)

    print(bob)

  • 相关阅读:
    【Linux软件安装】
    Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream
    Java IO(六) ObjectInputStream 和 ObjectOutputStream
    Java IO(四) InputStream 和 OutputStream
    Java IO(五)字节流 FileInputStream 和 FileOutputStream
    Java IO(三)FileDescriptor
    Java IO(二)File
    Java IO(一)概述
    Java中的集合(十五) Iterator 和 ListIterator、Enumeration
    Java中的自动装箱拆箱
  • 原文地址:https://www.cnblogs.com/sunnypoem/p/9972985.html
Copyright © 2020-2023  润新知