python中的类编程

1.Python类中的几个特殊函数

(1)__new__  是创建类的对象的函数,相当于C++中构造函数。
(2)__init__ 会在__new__之后被调用,用来初始化对象的。
(3)__del__ 是对象将要被销毁的时候被调用,用来将对象所占用的内存资源释放给操作系统,相当于C++中的析构函数。

 

2.python中类定义和使用

[plain] view plain copy
 
  1. class Shape:      #定义类Shape  
  2.         def draw(self):  
  3.                 print "draw a shape"  
  4.         def setName(self, name):  
  5.                 self.name = name  
  6.         def getName(self):  
  7.                 print self.name  
  8.   
  9. class Rectangle(Shape):   #定义类Rectangle,并继承父类Shape  
  10.         def draw(self):   #覆写|重写draw方法  
  11.                 print "darw a rectangle"  
  12.   
  13. if __name__ == "__main__":  
  14.         shape = Shape()  
  15.         shape.setName("shape")  
  16.         shape.getName()  
  17.         shape.draw()  
  18.           
  19.         rect = Rectangle()  
  20.         rect.setName("Rectangle")  
  21.         rect.getName()  
  22.         rect.draw()  

备注:

 

(1)成员方法的第一个参数必须是self,表示对象自身。

(2)python支持多继承,书写形式为:class Rectangle(Shape, Color),表示Rectangle有两个父类(Shape和Color)。如果在Shape和Color有一个相同的成员,按照继承书写的先后顺序,前面的父类覆写后面的父类,即Sharp类中的方法覆写Color类。

 

 

3.在Pythonclass声明中,几个需要注意的地方

1)变量分为实例变量和类变量;方法分为实例方法、类方法和静态方法。

2)对于实例变量,只能通过实例来访问变量。而对于类变量,既可以通过实例来访问变量,也可以直接类来访问变量。

3)对于实例方法,只能通过实例来访问。对于类方法,既可以通过实例,也可以直接通过类来访问。对于静态方法,既可以通过实例,也可以直接通过类来访问。

4)在变量和方法的命名前加上双下划线,表示的是私有变量或私有方法。对外是不可以见的。

5)在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量

 

4.pyhon中私有成员的定义

        在python中如果将一个成员前面加上双下划线(__),就表示该成员是私有成员,不能通过对象直接访问,需要通过对象的public接口间接地访问。

        python中私有成员和其他语言中的私有成员不太一样,python中的私有成员通过一定的特殊方式还是可以访问的。这就和python语言底层实现私有成员的方案有关。在python中私有成员的其实是使用了“名称变化术“。具体说来,就是python将类的内部定义的以双下划线(__)的成员”翻译“成前面加上单下划线和类型的形式。

        例如在类Bird中有def __talk(self): 成员方法,我们可以通过obj._Bird__talk()来访问。

 

5.新式类 & 旧式类

        由于python的版本变化,形成了新式类和老式类,有一些特性在老式类中是不支持的,因此在使用老式类已经没有必要了。因为在定义一个类的时候,需要注明使用新式类。标注类为新式类有两种方法:

       法一:在模块文件的开头添加如下语句

[plain] view plain copy
 
  1. __metaclass__ = type  #使用新式类  

       法二:定义新类时,显式地继承object类

[plain] view plain copy
 
    1. class MyClass(object):  #继承类object  
posted @ 2017-07-26 10:20  天涯海角路  阅读(360)  评论(0)    收藏  举报