Python 类和对象


类用于将数据和操作绑定到一起。


类的定义:

class Pet:
  """宠物类"""
  num = 0

  def __init__(self, name):
    self.name = name

  def eat(self, food):
      print(self.name, 'eat', food)

在上面类的定义中 class Pet:中的Pet是类名。 """宠物类"""是类的说明,可选。 num = 0定义了一个一个类变量num,类变量由所有实例共用。 def __init__(self, name):定义了一个特别方法,类实例化时被调用。相当于其它语言的构造函数。self参数相当于其它语言中的this,即当前对象。 self.name = name定义了一个实例变量name(第1个name)。第2个name为参数。 def eat(self, food):定义了一个方法eat

创建和使用对象

创建对象和函数调用类似变量 = 类名(参数),参数为__init__方法的参数列表中除去self参数之外的参数。例如dog = Pet('dog')创建一个Pet对象,并赋值给变量dog。

有两种方式调用类的方法: dog.eat('bone'),通过对象dog调用方法eat。 Pet.eat(cat, 'fish'),通过类Pet调用方法eat,对象cat作为self参数。

下面是创建和使用对象的例子:

#!/usr/bin/python

class Pet:
    """宠物类"""
    num = 0

    def __init__(self, name):
        self.name = name

    def eat(self, food):
        print(self.name, 'eat', food)

dog = Pet('dog')
dog.eat('bone') # dog eat bone

cat = Pet('cat')
Pet.eat(cat, 'fish')    # cat eat fish

Pet.num += 1
print('num :', Pet.num) # 1

类继承

类继承用于扩展父类的功能。子类会继承父类的所有属性和方法,子类中使用这些属性和方法,就好象在子类中定义了一样。

如果子类和父类中都有相同的方法,则子类中的方法会覆盖父类中的方法。如果子类的对象要调用父类中覆盖的方法,使用父类名.方法名(子类对象,参数)方式,例如下面例子中的Pet.eat(cat, 'fish')

Python支持多继承,可以有多个父类。

子类的定义:

class ChildClassName(ParentClass1, ParentClass2, ParentClass3,...):
  ...

下面是类继承的例子:

#!/usr/bin/python

class Pet:
    """宠物类"""
    num = 0

    def __init__(self, name):
        self.name = name

    def eat(self, food):
        print(self.name, 'eat', food)   # cat like fish

class Cat(Pet):
    """Pet的子类Cat"""
    def __init__(self, color):
        self.color = color
        Pet.__init__(self, 'cat')

    def eat(self, food):
        print(self.name, 'like', food)  # cat like fish

    def jump(self):
        print('jump')   # jump

cat = Cat('yellow')
cat.eat('fish')
Pet.eat(cat, 'fish')

print('color :', cat.color) # yellow
cat.jump()

操作符重载

操作符重载(Operator overloading)可以使用操作符来调用方法。

例如如果类中定义了add方法,可以使用+操作符来对两个类的对象相加。

下面是操作符重载的例子:

#!/usr/bin/python

class Pet:
    """宠物类"""
    def __init__(self, num):
        self.num = num

    def __add__(self, other):
        return self.num + other.num

dog = Pet(3)
cat = Pet(5)

print('total :', dog + cat) # 8