2Guy's Blog

[python]面向对象编程

Author:
by: sliuqin
Date:
7. October 2009 10:15
Tagged in:
Comments:
0

在学习C#和JavaScript的时候,都有接触过面向对象的编程,python中的面向对象也和他们类似,这里主要列出一些不一样的部分。(主要和JavaScript进行比较)

python中面对对象的一些术语

面向对象的两个方面:

  1. :创建的新类型
  2. 对象:类的实例

: 一个对象和类的变量。域的两种类型:

  1. 实例变量:属于每个实例的域
  2. 类变量:属于类的对象或属于类本身的域

方法:一个对象和类的函数

一个简单的类

Python
class Person():
    """
        一个简单的类定义
     """
    def __init__(self,name):
        """
            __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化
         """
        self.name = name
        
    def sayHello(self):
        """
            类/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量。
         """
        print 'hello,',self.name

sliuqin = Person('sliuqin') #创建一个Person实例。
sliuqin.sayHello()#==> sliuqin

self

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,这个特别的变量指对象本身,按照惯例它的名称是self

python 中的self,等价于JavaScript中的this

__init__

__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾都是双下划线。

__init__方法类似于C#中的 constructor

使用类和实例的变量

Python
class Person():
    """
        一个简单的类定义
    """
   #类的变量,类的所有对象(实例)共享使用。
    totalNum = 0 
     
    def __init__(self,name):
        """
            __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化
        """
        #对象到变量,由类的每个对象(实例)拥有。
        self.name = name
       #使用类变量。
       Person.totalNum +=1  #==> self.__class__.totalNum +=1
        
    def sayHello(self):
        """
            类/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量。
        """
        print 'hello,',self.name

sliuqin = Person('sliuqin') #创建一个Person实例。
sliuqin.sayHello()#==> sliuqin
jerry = Person('jerry')
#类变量
print jerry.totalNum #==> 2
    

上文已经讲到:有两种中类型的域,

  1. 类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。
  2. 对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。通过一个例子会使这个易于理解。

    __class__

    __class__ 是每个类实例的一个内置属性 (也是每个类的)。它是一个类的引用,而 self 是一个类的实例。所以上述代码中#使用类变量 ,可以使用self.__class__.totalNum 来代替Person.totalNum 。

    继承

    Python
    class WD(Person):
        """
        继承示例
        """
        def __init__(self,name,skill):
            Person.__init__(self, name)
            self.skill = skill
        def getSkill(self):
            print self.skill
    jerrySheng = WD('jerry.sheng','python')
    jerrySheng.sayHello() #==> hello,jerry.sheng
    jerrySheng.getSkill() #==>python
        

    【深入阅读】

    Add comment