Python 笔记 : 类和继承

  1. # -*- coding=  utf-8 -*-   
  2. # 文件编码定义的语法规则是: coding[:=]/s*([-/w.]+)  
  3. # 未指定编码将默认为 : ASCII  
  4. # 同时要注意物理文件的编码也要符合本语言指定的编码  
  5. # 更多可参考: http://python.org/dev/peps/pep-0263/  
  6. class CBase:   
  7.     ‘‘‘‘‘资源相关类‘‘‘     # 通过CBase.__doc__ 或者类实例.__doc__ 可以输出此说明  
  8.     counter = 0;    # 这是属于类的变量,相当于c++的静态变量,公有  
  9.     __counter = 1;  # 变量前加双下划线,将被认为是私有变量  
  10.                     # 在类外不能访问,否则认为是公有的变量  
  11.     #在Python 中的 __init__相当于C++的constructor,   
  12.     #在__init__中定义的是对象的变量,相当于c++的普通变量  
  13.     def __init__(self,name):    
  14.         self.name = name        # 普通对象变量,公有  
  15.         self.__private1 = 2     # 私有普通变量,私有  
  16.         print(‘__init__ base‘)   
  17.           
  18.     # __del__ 相当于c++的destructor  
  19.     def __del__(self):        
  20.         print(‘ base destruct‘)  
  21.       
  22.     # 任何一个类方法必须至少有一个参数  
  23.     #   这个参数相当于C++的this指针  
  24.     #   这个参数必须是第一个参数  
  25.     #   约定通常写作self  
  26.     def Help(self):             
  27.         ‘‘‘‘‘Help doc‘‘‘      # 方法的doc,引用语法 [类名|实例].方法名.__doc__  
  28.         print(‘---base help begin---/n‘,self.name)     # 在这儿引用类普通变量  
  29.         print(CBase.__counter) # 即便是本类的方法引用自己的静态变量,  
  30.                                     # 也需要加类名或者self 限定  
  31.         print(self.__private1)  #私有变量只有本类方法有权限引用  
  32.         print(‘---base help end---/n‘)  
  33.           
  34.     def Test(self):  
  35.         print(‘Base Test‘)  
  36.       
  37.       
  38. # 类的继承  
  39. # 可进行多重继承,语法class CC(CA,CB)  
  40. class CHigh(CBase):   
  41.     def __init__(self):  
  42.         CBase.__init__(self,‘high‘) # 调用基类的构造时,要手动传入第一个参数  
  43.         print(‘__init__ high‘)  
  44.           
  45.     def __del__(self):  
  46.         #CBase.__del__(self), 基类的析构函数是不能调用的  
  47.         # 基类的析构的函数也不会被自动调用  
  48.         print(‘ High destruct‘)  
  49.           
  50.     # 继承类的方法会覆盖掉基类的同名方法  
  51.     def Test(self):  
  52.         print(‘High Test ‘)  
  53.       
  54.     # python没有方法重载的概念  
  55.     # 源文件中最后一个定义的方法将会覆盖掉之前的同名方法  
  56.     # 现在在调用Test,必须传递第二个参数name  
  57.     # 上面的具有一个参数的Test方法被覆盖掉了.  
  58.     def Test(self,name):  
  59.         print(‘High Test have arg:‘,name)  
  60.           
  61. rh = CHigh()  
  62. #rh = CBase(‘hello‘)  
  63. rh.Help()  
  64. rh.Test();  
  65. print(CBase.counter)  
  66. print(rh.name)  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。