Python是一种面向对象的脚本语言,所以它也提供了面向对象编程的所有基本特征:允许多继承的类继承机制、派生类可以重写它父类的任何方法、一个方法可以调用父类中同名的方法、对象可以包含任意数量和类型的数据成员。
一、类定义
语法格式如下:
class ClassName:
<statement-1>
.
.
.
<statement-N>
类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。
二、类对象
类对象支持两种操作:属性引用和实例化。
1、属性引用
属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name。
类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
它有一个属性 i 和 方法 f ,所以可以用MyClass.i
和 MyClass.f
进行属性引用,分别返回一个整数和一个函数对象。__doc__ 也是一个合法的属性,返回属于这个类的文档字符串。
2、实例化
类的实例化形式为:
x = MyClass()
创建了一个新的实例,并且将其指定给局部变量 x 。
在创建实例时,通常可能都需要有特定的初始状态,所以一个类可以定义一个名为 __init__()
的特殊方法(构造方法):
def __init__(self):
self.data = []
当一个类定义了 __init__() 方法,类在实例化时会自动调用 __init__() 方法,用于创建新的类实例。 就像C++中的构造函数一样, __init__() 也可以有更多的参数,这时实例化提供给类的参数会传给 __init__() ,比如:
#!/usr/bin/python3
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 输出结果:3.0 -4.5
self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
三、实例对象
类对象实例化得到实例对象(Instance Object),实例对象只能进行 属性引用 这一种操作。合法的属性有两种:数据属性 和 方法。
1、数据属性
数据属性(data attributes)相当于C++中的数据成员,在Python中,数据属性不需要声明,当它们第一次指定时就会被引入:
class MyClass:
i = 12345
def f(self):
return 'hello world'
x = MyClass()
x.counter = 1
print(x.counter)
del x.counter
注:在Python中每个值都是一个对象,可以通过object.__class__
来获取对象的 class (即类型),其作用与 type() 相同。
2、方法
在类对象中定义的函数与普通函数只有一个特别的区别:它们的第一个参数必须是self
,用以指定调用该方法的实例对象。
注意:类的方法只有被绑定到实例对象上才能够被调用。比如上面的例子中,x 是 MyClass类的一个实例对象,所以它可以直接调用 f 方法:
x.f()