Home >Backend Development >Python Tutorial >Python程序设计入门(5)类的使用简介

Python程序设计入门(5)类的使用简介

WBOY
WBOYOriginal
2016-06-16 08:43:411272browse

一、类的定义和使用

python定义一个类的基本语法是:

复制代码 代码如下:
class classname([基类一,基类二...]):

    [def __init__(self, [agv1,agv2...]):]  # 定义构造函数

    def method1(self, [agv1,agv2...]):  # 成员函数



   
使用时用:

对象实例名 = 类名(参数列表)

对象实例名.成员函数名(参数列表)

和其它语言不同之处是:

(1) python没有new关键字
(2) 成员函数必须带有 self 参数(它相当于传统语言里的 this )
(3) 成员变量不需要显式定义,不过为了方便起见,大多数人还是会在构造函数里定义,以免过于莫名其妙。
例:

复制代码 代码如下:
# -*- coding: gb18030 -*-
class mycls:

    def __init__(self, vl, vr):
        self.l = vl
        self.r = vr
    def show_me(self):
        print x.l, x.r

x = mycls(3, 15)
x.show_me()

二、高级应用

1、成员函数类型变量

python 可以直接把一个成员函数作为一个变量,就上面的类而言,可以这样:

复制代码 代码如下:
x = mycls(3, 15)
myx = x.show_me()
print 'I am a copy!\n'
myx

2、继承和多继承

要继承其它类,定义时指定要继承的基类即可
class classname([基类一,基类二...]):

3、私有成员

python实际上并没有私有成员的概念,不过如果把变量名定义为 ___var (三个下划线)这样系统会自动把名称改为 _classname___var,

这个值可以用 self.___var 读取(因为会一起替换),但在外部是无法用  obj.___var 读取的。

如:

复制代码 代码如下:
class test_cls:

    def __init__(self):
        self.___aaa = 'I am a python!'

    def test_func(self):
        print self.___aaa

#这种方法能输出正确结果
x = test_cls()
x.test_func()

#下面这种方法会报错!
x = test_cls()
print x.___aaa

三、迭代器 和 发生器

在 python 中,很多东西都是可以用 for 来遍历的,实际是这个东西的实现是通过迭代器或发生器来实现的

1、迭代器

复制代码 代码如下:
class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

#应用
for cin Reverse('spam'):
    print c

这里的重点是 __iter__ 和 next 两个函数,使用  next 时,用  raise StopIteration 指定遍历结束。

2、发生器

发生器实际是用单独一个函数实现被遍历的源
在发生器函数中, 用 yield varname 返回每次被遍历的元素即可
例:

复制代码 代码如下:
def reverse(data):
    for index in range(len(data)-1, -1, -1):
        yield data[index]

for c in reverse('golf'):
    print c

至此,python的基本语法也说得差不多了,至于其它一些隐秘的东西,需要大家实际操作去发现了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn