如何定义类
class ClassName(base_class[es]):

"optional documentation string"

static_member_declarations

method_declarations

使用 class 关键字定义类。 可以提供一个可选的父类或者说基类; 如果没有合适的基类,

那就使用 object 作为基类。class 行之后是可选的文档字符串, 静态成员定义, 及方法定

义。

class FooClass(object):

"""my very first class: FooClass"""

version = 0.1 # class (data) attribute

def __init__(self, nm='John Doe'):

"""constructor"""

self.name = nm # class instance (data) attribute

print 'Created a class instance for', nm

def showname(self):

"""display instance attribute and class name"""

print 'Your name is', self.name

print 'My name is', self.__class__.__name__

def showver(self):

"""display class(static) attribute"""

print self.version # references FooClass.version

def addMe2Me(self, x): # does not use 'self'

"""apply + operation to argument"""

return x + x

Edit By Vheavens

Edit By Vheavens

在上面这个类中, 我们定义了一个静态变量 version, 它将被所有实例及四个方法共享,

__init__(), showname(), showver(), 及熟悉的 addMe2Me(). 这些 show*()方法并没有做什

么有用的事情, 仅仅输出对应的信息。 __init__() 方法有一个特殊名字, 所有名字开始和

结束都有两个下划线的方法都是特殊方法。

当一个类实例被创建时, __init__() 方法会自动执行, 在类实例创建完毕后执行, 类

似构建函数。__init__() 可以被当成构建函数, 不过不象其它语言中的构建函数, 它并不创

建实例--它仅仅是你的对象创建后执行的第一个方法。它的目的是执行一些该对象的必要的初

始化工作。通过创建自己的 __init__() 方法, 你可以覆盖默认的 __init__()方法(默认的

方法什么也不做),从而能够修饰刚刚创建的对象。在这个例子里, 我们初始化了一个名为 name

的类实例属性(或者说成员)。这个变量仅在类实例中存在, 它并不是实际类本身的一部分。

__init__()需要一个默认的参数, 前一节中曾经介绍过。毫无疑问,你也注意到每个方法都有

的一个参数, self.

什么是 self ? 它是类实例自身的引用。其他语言通常使用一个名为 this 的标识符。

如何创建类实例

>>> foo1 = FooClass()

Created a class instance for John Doe

屏幕上显示的字符串正是自动调用 __init__() 方法的结果。当一个实例被创建,

__init__()就会被自动调用。不管这个__int__()是自定义的还是默认的。

创建一个类实例就像调用一个函数, 它们确实拥有一样的语法。它们都是可调用对象。类

实例使用同样的函数运算符调用一个函数或方法。既然我们成功创建了第一个类实例, 那现在

来进行一些方法调用:

>>> foo1.showname() Your name is John Doe

My name is __main__.FooClass

>>>

>>> foo1.showver()

0.1

>>> print foo1.addMe2Me(5)

10

>>> print foo1.addMe2Me('xyz')

Edit By Vheavens

Edit By Vheavens

xyzxyz

每个方法的调用都返回我们期望的结果。比较有趣的数据是类名字。在showname()方法中,

我们显示 self.__class__.__name__ 变量的值。对一个实例来说, 这个变量表示实例化它的

类的名字。(self.__class__引用实际的类)。在我们的例子里, 创建类实例时我们并未传递

名字参数, 因此默认参数 'John Doe' 就被自动使用。在我们下一个例子里, 我们将指定一

个参数。

>>> foo2 = FooClass('Jane Smith') Created a class instance for Jane Smith

>>> foo2.showname()

Your name is Jane Smith

My name is FooClass

第十三章将详细介绍Python 类和类实例。

2.19 模块

模块是一种组织形式, 它将彼此有关系的Python 代码组织到一个个独立文件当中。

模块可以包含可执行代码, 函数和类或者这些东西的组合。

当你创建了一个 Python 源文件,模块的名字就是不带 .py 后缀的文件名。一个模块创

建之后, 你可以从另一个模块中使用 import 语句导入这个模块来使用。

如何导入模块

import module_name

如何访问一个模块函数或访问一个模块变量

一旦导入完成, 一个模块的属性(函数和变量)可以通过熟悉的 .句点属性标识法访问。

module.function()

module.variable

现在我们再次提供 Hello World! 例子, 不过这次使用 sys 模块中的输出函数。

>>> import sys

Edit By Vheavens

Edit By Vheavens

>>> sys.stdout.write('Hello World!\n')

Hello World!

>>> sys.platform

'win32'

>>> sys.version

'2.4.2 (#67, Sep 28 2005, 10:51:12) [MSC v.1310 32 bit

(Intel)]'

这些代码的输出与我们使用 print 语句完全相同。 唯一的区别在于这次调用了标准输出

的 write()方法,而且这次需要显式的在字符串中提供换行字符, 不同于print 语句, write()

不会自动在字符串后面添加换行符号。

关于模块和导入, 你可以在第12 章中得到更多有用的信息。在那里会详细介绍本章上面

所有提到的主题,希望我们提供的快速入门能达到你迅速使用Python 开始工作的目标。

Python 语句中有一些基本规则和特殊字符:

Python基础教程学习(三)的更多相关文章

  1. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  2. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  3. .Net程序员之Python基础教程学习----函数和异常处理[Fifth Day]

       今天主要记录,Python中函数的使用以及异常处理. 一.函数:    1.函数的创建以及调用. def Add(val1,val2): return val1+val2; print Add( ...

  4. .Net程序员之Python基础教程学习----判断条件与循环[Fourth Day]

        今天学习Python的判断条件与循环操作. 一. 布尔变量: 在学习判断条件之前必须的了解bool变量,在Python中bool变量与C语言比较类似,与.net差别比较大,其中下面集中情况需要 ...

  5. .Net程序员之Python基础教程学习----字典的使用 [Third Day]

      今天学习了字典的使用, 所谓的字典其实就是键值对数据, 一个字典里面有唯一的Key对应一个value,Key是唯一的,Value不唯一. 在.net添加相同的Key会报错,在Python,若出现相 ...

  6. .Net程序员之Python基础教程学习----字符串的使用 [Second Day]

         在The FirstDay 里面学习了列表的元组的使用,今天开始学习字符串的使用.字符串的使用主要要掌握,字符串的格式化(C语言中我们应该都知道,Python和C语言差别不大),字符串的基本 ...

  7. 【学习笔记】Python基础教程学习笔记

    教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...

  8. python基础教程(三)

    序列概览 Python 包含6 种内建的序列,这里重点讨论最常用的两种类型:列表和元组. 列表与元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可以会更好用:而 ...

  9. python基础教程-第三章-使用字符串

    本章将会介绍如何使用字符串何世华其他的值(如打印特殊格式的字符串),并简单了解下利用字符串的分割.联接.搜索等方法能做些什么 3.1 基本字符串操作 所有标准的序列操作(索引.分片.乘法.判断成员资格 ...

随机推荐

  1. 一些你可能需要的okhttp实现

    https://blog.csdn.net/qq_17766199/article/details/53186874 今天分享一些我在项目中使用到的okhttp实现,由简至难.(以下内容均在okhtt ...

  2. Java学习(异常类)

    一.什么是异常: 异常就是在运行时产生的问题.通常用Exception描述. 在java中,把异常封装成了一个类,当出现问题时,就会创建异常类对象并抛出异常相关的信息(如详细信息,名称以及异常所处的位 ...

  3. C++中memcpy和memmove

    二者都是内存拷贝 memcpy内存拷贝,没有问题;memmove,内存移动?错,如果这样理解的话,那么这篇文章你就必须要好好看看了,memmove还是内存拷贝.那么既然memcpy和memmove二者 ...

  4. ASP.NET MVC之Ajax如影随行

    一.Ajax的前世今生 我一直觉得google是一家牛逼的公司,为什么这样说呢?<舌尖上的中国>大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种 ...

  5. USACO 6.1 Cow XOR

    Cow XORAdrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of ...

  6. 14个你可能不知道的JavaScript调试技巧

    调试JS的时候,搜索一下这个标题

  7. 虚拟机spark集群搭建

    RDD弹性分布式数据集 (Resilient Distributed Dataset) RDD只读可分区,数据集可以缓存在内存中,在多次计算间重复利用. 弹性是指内存不够时可以与磁盘进行交互 join ...

  8. Java 中的异常处理机制

    生活中的异常:  不能够完整而顺利的完成一些工作 根据不同的异常进行相应的处理,而不会就此终端我们的生活 引出:  异常处理: 方式:  1.选择结构(逻辑判断)避免 demo:if逻辑处理异常 im ...

  9. [flask]flask_login模块,session及其他

    读flask源码的时候,有一点一直到现在都没有一个清晰的概念,比如四个全局变量g,current_app,session,request是怎么做到的 按照查到的资料里面的说法,为了不至于每次都主动调用 ...

  10. python opencv3 FLANN单应性匹配

    git:https://github.com/linyi0604/Computer-Vision 匹配准确率非常高. 单应性指的是图像在投影发生了 畸变后仍然能够有较高的检测和匹配准确率 # codi ...