Python 类与对象

一切皆对象

Python中,一切皆对象。我们通过属性和行为来描述一个对象。比如上一节我们定义的一个小狗,它的颜色、大小、 体重等是它的属性和特征,跑、叫等是它的行为。Python中一切数据都是对象,包括自定义的对象及基本的数据类型如数值、列表、字典、元组、字符串等。每个对象都有三个基本属性:标识、类型和值。我们在描述抽象客观世界的一个真实事物时,主要包含两个方面:

  • 它是什么样的(属性)
  • 它可以做什么(行为)
    Python中,一个对象的特征称为属性,它所具有的行为称为方法。
    某种程度上,可以认为:
    对象 = 属性 + 方法
    
    Python中,我们把具有相同属性和方法的对象归结为一个类(class)。
    类是对象的模板,是对象的抽象。对象是类的实例化。

在上一节中,可以看到,当创建一个类时,我们可以定义一个__init__方法,当我们使用该类创建一个类的实例—对象时,可以运行这个方法,并通过参数传递来进行对象的初始化,这样创建对象时就可以通过参数设定把属性设置为我们所希望的值。

# -*- coding:utf-8 -*-
#Filename:class.py
class Dog:
    def __init__(self, name):
        self.name = name
        print 'Create a object:%s'%self.name
    def speak(self):
        print '%s:wangwang'%self.name
mydog1 = Dog('阿黄')
mydog1.speak()
mydog2 = Dog('大黄')
mydog2.speak()

运行结果:

C:\Python27\python.exe F:/python/python_proj/class.py
Create a object:阿黄
阿黄:wangwang
Create a object:大黄
大黄:wangwang
Process finished with exit code 0

通过结果可以看到,我们创建不同的对象时,可以通过 __init__ 方法来给我们不同的对象赋值。同时,speak方法在调用时,通过该函数的self参数会告诉方法是哪个对象来调用的,我们称为实例引用。

类的变量与对象的变量

在类中定义的变量称为类的变量,使用self赋值的变量为对象的变量,两者的作用域是不同的。类的变量由一个类的所有实例化对象共享使用,当所有实例化对象中有一个对象对该类的变量做了重新赋值操作时,这个改动会反映到所有其它的实例化对象中。
而对象的变量,由类的每一个实例化对象分别拥有,每一个对象都有自己对这个域的一份拷贝。一个类的所有不同实例中,每个对象的变量虽然有相同的名字但是处于不同的作用域,是互不关联的。

# -*- coding:utf-8 -*-
#Filename:class.py
class Dog:
    dog_num = 0
    def __init__(self, name,id):
        Dog.dog_id = id
        self.name = name
        Dog.dog_num = Dog.dog_num + 1
        print 'Create a object:%s'%self.name
        print 'object ID:%d '%Dog.dog_id
    def speak(self):
        print '%s:wangwang'%self.name
mydog1 = Dog('阿黄',001)
mydog1.speak()
mydog2 = Dog('大黄',002)
mydog2.speak()

运行结果:

C:\Python27\python.exe F:/python/python_proj/class.py
Create a object:阿黄
object ID:1 
阿黄:wangwang
Create a object:大黄
object ID:2 
大黄:wangwang

Process finished with exit code 0

通过结果,我们可以看到,dog_num作为类的成员变量,当有一个对象改变它时,会反映到其它对象上。而dog_id作为对象的变量,不会影响当其它对象的相同名字的成员变量的使用。

《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客