zoukankan      html  css  js  c++  java
  • Python 教程阅读笔记(八):类

    Python中的类提供了面向对象编程的所有标准特性:类继承机制允许有多个基类,派生类可以覆写基类的所有方法,其方法可以调用基类的方法。类在运行时创建,可在创建后进一步修改。

    namespace 是一种从名字到对象的映射。大多数命令空间都实现为字典。不同的命名空间的名字没有半根毛的关系

    可写的属性可由del语句删除

    命名空间在不同的时间创建,有不同的生命周期。包含内置的名字的命名空间在解释器启动时就创建了,而且不会被删除。模块的全局命令空间在模块定义被读入时创建,被认为是__main__模块的一部分,内置的名字实际上也存在模块中,模块名为builtins

    函数的局部命名空间在函数被调用时创建,在函数返回或抛出异常且没在函数被处理时被删除。递归调用都由自己的局部命名空间

       

    域是命名空间可直接访问的文本区域。直接存取意味着不需要对名字加啥限定就可直接使用

    所有引入新名字的操作都使用局部域:如import语句,函数定义

    global 语句用来指示特定的变量作用于全局域,应该绑定到这里

    nonlocal 语句用来指示特定的变量作用于闭包域,应该绑定到这里

    class ClassName:

        <statement-1>

        .

        .

        . 

        <statement-N>

    当一个类的定义结束后,一个类对象将被创建

    属性引用采用标准的语法:obj.name

    类实例化采用函数的符号,可以假装类对象是个无参的函数,返回一个类的新实例

    很多类在创建对象时需要特殊的初始化状态

    def __init__(self):

          self.data = []

    类定义的时候没有参数,但在实例化时可以有参数,这些参数可以在__init__中使用

    数据属性不需要申明,跟局部变量类似,在第一次赋值时诞生。而方法属性必须是申明过的。

    obj.method() 等价于  class.method(obj)

    数据属性命名如果和方法属性一样,会覆写方法属性。数据属性和方法属性需满足一定的编程规范。

    继承采用下面的格式:

    class DerivedClassName(BaseClassName):    #modname.BaseClassName

        <statement-1>

        .

        . 

        .

        <statement-N>

    如果想直接调用基类的方法

    BaseClassName.methodname(self, arguments)

    isinstance()、issubclass() 是两个内置的函数用来处理继承的。

    多重继承时,搜索顺序为先深度搜索,再从左到右,而且若类在层级上有重叠时不会重复搜索两次

    名字改编在让子类覆写方法而不打破内部的方法调用时是有用的。 至少两个前缀下滑线,至多一个后缀下滑线,如__spam,会被替换为_classname__spam

    如果需要像C语言的结构体的数据类型,可用空类实现

    异常也是一个类

    for语句的实现,iter()返回一个迭代对象,__next__()函数从容器中一次取一个元素。当没有元素时,会抛出一个StopIteration异常

    因此想要类可迭代,就需要实现__iter__()和 __next__()两个方法

    可用生成器来实现迭代,以避免实现__iter__()和__next__()两个方法,方法是在返回时使用yield。生成器会自动进行方法创建并保存程序状态,当生成器终止时,会自动抛出StopIteration

    生成器表达式:一些简单的生成器可以简洁的编码为表达式,使用的语法可列表速购类似,除了使用括号而不是方括号

    sum(i*i for i in range(10))

  • 相关阅读:
    《ML模型超参数调节:网格搜索、随机搜索与贝叶斯优化》
    《黎曼几何与流形学习》
    《信息几何优化,随机优化, 与进化策略》
    生产订单加反作废按钮
    生产订单新增按钮没权限
    生产订单备注字段锁定
    审核后提交物料附件
    MRP设置自动执行
    CRM系统数据授权
    复制物料时不复制安全库存
  • 原文地址:https://www.cnblogs.com/westwind/p/2506902.html
Copyright © 2011-2022 走看看