python类

上一页 下一页

Python是一个完全的面向对象的语言,在Python中所有的数据类型都是对象。Python的类保留了完整的权力,比如:类的继承机制允许有多个基础类,子类可以覆盖基础类的方法,能够用相同的名字来调用基础类中的同名方法。对象能够包含任意数量的私有数据。
在Python中,内建的类型能够作为基础类使用,大多数内建的操作符可以为类的实例重定义。

1、Python的范围(scope)和名字空间(Namespace)

名字空间是名字集到对象集的映射。大部份的名字空间通常作为Python的字典来实现,通常这不是显而易见的。名字空间的例子如:内建的名字集(函数如abs());模块中的全局变量;一个函数定义中的局部变量。在某种意义上,一个对象的属性集就形成了一个名字空间。不同的名字空间中的名字是没有任何关系的,例如两个不同的模块中可能都定义了一个名为whereis的函数,为了避免混肴,我们必须给它加上前缀(模块的名字)。
我们把.后面的名字称为属性。例如z.real,real是对象z的属性,严格来说,对模块中的名字的引用是属性引用,例如modname.funcname,modname是一个模块对象,funcname是它的一个属性。
属性是只读或可写的。你可以给可写的属性赋值,例如:modname.the_answer=42"。你也可以用del语句删除可写的属性,例如:del modname.the_answer从名为modname的对象中删除属性the_answer。
不同时刻创建的名字空间有不同的寿命。包含内建的名字集的名字空间在python解释器启动时创建,并一直存在。模块的全局名字空间在模块被读入时创建。通常模块的名字空间在解释器退出时消失。
函数的局部名字空间是在函数被调用时创建的,当函数返回或引发一个在函数内部未被处理的异常时删除。
scope是Pyhton程序的一个文本区域。

2、类的定义

下面是类的定义方法:
class ClassName:
. . .
和函数一样,类在使用前必须先定义。通常在类的定义中的语句一般是函数的定义,它是类的方法。当然也可以是其它的语句。

3、类的对象

类的对象支持两种操作:属性引用和实例化。
属性引用的方法:obj.name。
下面是一个类的定义例子:
class MyClass:
"A simple example class"
i = 12345
def f(self):
return 'hello world'
MyClass.i和MyClass.f都是有效的,它们分别产生一个整型对象和一个函数对象。__doc__也是一个有效的属性,它返回这个类的文档字符串“A simple example class”。
实例化的方法:x=MyClass()它产生类的一个新的实例并赋于局部变量x。我们可以给类的定义加上一初始化函数定义:
def __init__(self):
self.data = []
这样我们在实例化类时,将首先调用这个初始化函数,以完成相应的任务。
__init__()可以有多个参数。下面是一个例子:
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
说明:
self代表实例本身;r,i是局部变量,不需要事先声明。
注意:x.f()等同于MyClass.f(x)

4、实例化的对象

当一个类被实例化后,它产生一个实例化的对象,我们如何使用这个对象呢?我们可以用它的两个有效的属性:数据属性和方法属性。
实例化产生的对象的数据属性不需要事先声明,我们可以在需要的时候直接通过赋值产生。
例子如下:
x=MyClass()
x.counter = 1
while x.counter < 10:
x.counter = x.counter * 2
print x.counter
del x.counter
其中的counter属性就是一个数据属性。
另一个实例对象的属性是方法,实例对象的方法对应于它的类定义中的函数,但它们是不同的,例如x.f是方法对象,但MyClass.f是函数对象。

5、继承

子类的定义方法如下:
class DerivedClassName(BaseClassName):
. . .
如果基础类定义在别的模块中,那么它的子类可以这样定义:
class DerivedClassName(modname.BaseClassName):
在使用子类时,如果要求的属性不在子类中,那么将会向上搜寻到基类中。调用基类的方法的简单办法:BaseClassName.methodname(self, arguments)"。子类中的方法将覆盖其基类的同名方法。

6、多重继承

Python支持有限的多重继承。多重继承的方法如下:
class DerivedClassName(Base1, Base2, Base3):
. . .

如果所需要的一个属性在子类 DerivedClassName中没有找到,则依次从左到右,按Base1, Base2, Base3的顺序在基类中寻找。
 

本系列的文章来源是http://www.pythontik.com/html,如果有问题可以与那里的站长直接交流。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值