zoukankan      html  css  js  c++  java
  • 如何创建一个类

    一。创建两个类:

    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__对比差异:

                

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

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

                  

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

             

  • 相关阅读:
    升级windows 11小工具
    windows 10更新升级方法
    您需要了解的有关 Oracle 数据库修补的所有信息
    Step by Step Apply Rolling PSU Patch In Oracle Database 12c RAC Environment
    Upgrade Oracle Database Manually from 12.2.0.1 to 19c
    如何应用版本更新 12.2.0.1.210420(补丁 32507738 – 2021 年 4 月 RU)
    xtrabackup 安装、备份和恢复
    Centos_Lvm expand capacity without restarting CentOS
    Centos_Lvm_Create pv vg lv and mount
    通过全备+relaylog同步恢复被drop的库或表
  • 原文地址:https://www.cnblogs.com/derekchen/p/5597191.html
Copyright © 2011-2022 走看看