如何创建一个类

一。创建两个类:

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

            

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

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

              

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

         

原文地址:https://www.cnblogs.com/derekchen/p/5597191.html