• 如何创建一个类


    一。创建两个类:

    1. Person类:处理人员信息的类

    2.Manager类:一个定制的Person类

    二。实例及实例属性:

        1. 创建实例

          

            模块名次小写,类名次第一个字母大写

        2.编写构造函数:

           2.1 统计人员的基本信息,作为实例属性,以状态信息保存到各个实例的命名空间里,供后续的调用。

           2.2 以__init__构造函数来实现:在创建实例的同时创建这些实例的属性

                基本信息无默认值的方式:

                 

                传入参数name,job,pay均为类的本地变量,self.name/job/pay为实例变量

                基本信息有默认值的方式:

               

                 函数的参数采用了关键字参数

         

         3.进行中测试:

            3.1增量原型:写一部分代码,测试,再写一部分代码,再测试

            3.2 if __name__==__main__:

                 模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import

                 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接

                 运行模块,在这 种情况下,__name__ 的值将是一个特别缺省"__main__"

                 

                在cmd 中直接运行.py文件,则__name__的值是'__main__';

                而在import 一个.py文件后,__name__的值就不是'__main__'了;

                从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件

                因此,此语句用于本模块里运行并显示调试/测试代码的结果,但是本模块导入到其他模块的时候,由于此if条件为False,if下的

                测试代码就不会运行之所以用这个if语句的具体原因如下:

                  

                  

    三。添加方法:

        1. 类之外的硬编码:

            这种方式,每个实例都需要写一次代码,导致代码的冗余,同时,后期维护时,变更逻辑,需要每个实例都去

            做一一的修改,弊端很明显。

            

        2. 编写类方法:

            封装:把操作逻辑包装到界面之后

           

           

    四。运算符重载:

         

        

           运行结果:

           

    五。通过子类定制(扩展)方法/实例属性:

         1. 编写一个子类:Manager:

             

         2. 扩展:不好的方式

             

         3. 扩展:好的方式

             

         4. 扩展实例属性:

             由于调用manager类产生的实例,他们job统一都是“mgr”,没有必要传参数,通过__init__的定制,

             在Manager子类直接写死。

             

             

    六。多态:

         下面的例子里由于Bob,Sue,Tom由不同的类产生的,在for循环里,调用的giveRaise方法是不同的,即所谓的“多态”。

         

    七。使用内省工具了解类的内容及结构

         (一)概念:

          了解python对象内部运行,和处理机制的一些命令或工具

           1.类的字典属性:__dict__及__dict__keys:

             由于类及实例的命名空间均是采用字典的模式,因此可以用上面的命令获取类及实例的所有键及其值

             1.1 __dict__只显示self的属性,不显示继承类的属性,因为类属性还是在类里面,没有复制到实例的命名空间

             1.2如果要显示继承的类属性可以用dir()命令

             1.3 python2的版本和python3的版本显示上会有差别,python3上显示的更多些

          2.dir()函数:显示类的所有属性及实例,但不显示属性对应的值,即只显示“键”,不显示”值“

             

          3.用于实例的__class__,__class__.__name__:查找继承类

          4.用于类的__bases__,__name__:查找超类

        (二)样例:

          样例一:里面的一些调用方法可以直接拿来用在测试里

          

           样例二:

           

           (三)一种通用的类及实例显示模式:

             

             

          (四)完整的Person,Manager类代码:

                

                

                运行结果:和调用运算符重载__str__对比差异:

                

          (五)这些內省工具命名的规则:

                  原则:避免和应用的类命名冲突,导致在类继承中被覆盖

                  

    八。使用文件或数据库,使类的数据持久化        

             

  • 相关阅读:
    计算机网络
    计算机网络
    Spring Boot自定义参数不提示、@ConfigurationProperties报错
    计算机网络概述
    面试题:类的初始化与实例的初始化
    面试题:自增变量
    最近做了一个Spring Boot小项目,大家帮忙找找bug吧, http://www.dbeetle.cn
    设计模式
    6.7 使用show profile 进行sql分析
    6.6 构建大表
  • 原文地址:https://www.cnblogs.com/derekchen/p/5597191.html
Copyright © 2020-2023  润新知