Python3.2官方文档翻译-- 类定义语法和类对象

6.3 初识类

类引入一些新语法:三种新的对象类型和一些新的语义。

6.3.1 类定义语法

类定义的最简单形式如下:

class ClassName:

<statement-1>

.

.

.

<statement-N>

类定义和函数定义(def语句)一样,必须先执行然后才生效。(你当然可以把类定义放在if语句分支中或者嵌入在函数中)

在实际情况中,在类定义中的语句常常是方法的定义,但是其他语句也是允许的并且有时是很有用的---以后我们会讨论到这点。在类中的定义方法通常有一个参数列表的特殊形式, 用于方法的调用约定--再者这将来会解释。

当进入类定义时,新的命名空间将会创建且当用局部作用域来用-因此所有的有关局部变量的参数将会进入新的命名空间。特别地, 函数定义绑定新函数的名称。

当类定义完成时,(通过结尾),一个类对象就会产生。这个是由类定义所创建的包含命名空间内容的基本包装。我们将会在接下来的部分了解更多的关于类对象的知识。类对象在这里绑定在类定义文件开头给出的类名称。(就是实例中的ClassName)

6.3.2 类对象

类对象支持两种类型操作:属性引用和实例化

在python中属性引用用标准的语法来操作所有的属性引用:obj.name.合法的属性名称就是当类对象创建时在类命名空间中的所有名称。因此,如果类定义如下:

class MyClass:

"""A simple example class"""

i = 12345

def f(self):

return ’hello world’

则用MyClass.i和MyClass.f是合法的属性引用,各自返回一个整型和函数对象。类属性也可以进行赋值,因此你可以用通过赋值来来改变MyClass.i的值。_doc_是一个合法属性,返回一个属性类的文档字符串。;“一个简单类例子”

类实例就是用函数符号。假设类对象就是无参数的函数,它返回一个类的实例。 例如:(假设上面的类)

x = MyClass()

创建一个类实例和把这个对象赋值给局部变量x.

实例化操作(调用类对象)将会创建一个空对象。许多类可以用设置特定的初始状态来创建对象。因此类可以定义一个名叫_init()的特殊方法,如下:

def __init__(self):

self.data = []

当类定义_init()方式时,类实例化就会自动调用_init_()方法为新创建的类实例。因此在这个实例中,一个新初始化的实例可以通过如下方式得到:

X = MyClass()

当然,_init_方法为了更灵活应用拥有参数。在那种情况下,给予类实例操作的实例将会传递给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)

时间: 2024-10-08 04:42:46

Python3.2官方文档翻译-- 类定义语法和类对象的相关文章

Python3.2官方文档翻译--类备注和异常也是类

6.7备注 有时有个像Pasca中"记录"和C中"数据体"的数据类型非常有用.集合一些数据项.一个空类定义可以清楚地显示: class Employee: pass john = Employee() # Create an empty employee record # Fill the fields of the record john.name = 'John Doe' john.dept = 'computer lab' john.salary = 1000

Python3.2官方文档翻译---类一些说明

6.4 一些说明 数据属性可以重写同名的方法属性.这是为了避免在大型系统中产生问题的意外名称冲突.所以用一些减少冲突的常用方法是很有效果的.常用的方法包括:大写字母方法名称,用唯一的字符串来做为数据属性的名称(可以是个下划线_)或者用动词命名方法和用名字命名数据属性. 数据属性就像和对象的普通用户一样可以被方法引用.换句话说,类不能用来实现纯净的数据类型.事实上,在python中不能强制数据隐藏,一切基于约定.(另一方面,如C中写的,python的实现可以做到完全隐藏实现细节并且在必要是可以控制

Python3.2官方文档翻译-多重继承和私有变量

6.5.1 多重继承 Python也支持多种继承形式.一个能继承多个基类的类定义如下: class DerivedClassName(Base1, Base2, Base3): <statement-1> . . . <statement-N> 大多数情况,最简单而言,你可以把从父类继承下来的属性查询看成是遵循深度优先,从左到右. 而不是在同一等级重复的同样类中执行两次.因此,如果一个属性没在派生类中找到,首先会在base1然后再base1的基类中,如果在那里都没发现,就会在bas

Python3.2官方文档翻译--模板

8.2 模板 String模块包含一个用途广泛的类,此类为最终用户的编辑提供了简单的语法支持.这让用户不修改应用程序的前提下实现他们应用程序的定制. 这种格式使用$加有效的python标识符(数字.字母和下划线)形式的占位符名称.通过在占位符两侧使用大括号便可以不用空格分隔在其后面跟随更多的字母和数字字符.使用$$来创建一个单独$转码字符. >>> from string import Template >>> t = Template('${village}folk 

Python3.2官方文档翻译--继承

6.5 继承 当然,一门语言特性如果不支持继承那么名称类就失去了价值.子类继承父类的方法如下: class DerivedClassName(BaseClassName): <statement-1> . . . <statement-N> 名称BaseClassName必须定义在一个包含派生类定义的作用域中.在基类名称的位置上,其他随意表达式都是允许的.例如,当基类定义在其他模块中,这也是可用的. class DerivedClassName(modname.BaseClassN

Python3.2官方文档翻译-标准库概览(二)

7.5 字符串模式匹配 re模块为高级字符串成处理提供了正则表达式匹配. 对于复杂的匹配和处理,正则表达式能够提供简明优化的方法: >>> import re >>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest') ['foot', 'fell', 'fastest'] >>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat'

Python3.2官方文档翻译--输出格式化

第八章 标准库二 第二部分涵盖了许多更能满足专业开发人员需求的高级模块.这些模块在小脚本中很少出现. 8.1 输出格式化 Reprlib模块为大型的或深度嵌套的容器缩写显示提供了repr()函数的一个定制版本. >>> import reprlib >>> reprlib.repr(set('supercalifragilisticexpialidocious')) "set(['a', 'c', 'd', 'e', 'f', 'g', ...])"

Python3.2官方文档翻译-列表工具和十进制浮点数计算

Disk Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2368    Accepted Submission(s): 333 Problem Description 有很多从磁盘读取数据的需求,包括顺序读取.随机读取.为了提高效率,需要人为安排磁盘读取.然而,在现实中,这种做法很复杂.我们考虑一个相对简单的场景.磁

Python3.2官方文档翻译--生成器以及生成器表达式

6.10 生成器 生成器是一个创建迭代器的简单而有力的工具.它们书面写时就像规范的函数,但是用yield语句在任何时候都可以返回数据.每次在它上调用next()方法,生成器继续回到一起它离开的位置.(它记录所有数据值以及最后执行的语句).下面自己就是展示生成器如何方便创建: 用生成器可以做任何于底层迭代器相关的事情,正如前面章节中描述的.让生成器更加紧凑的办法就是自动创建的_iter_()和_next_()方法. 生成器其他重要的特性就是在调用过程中局部变量和执行状态可以自动的保存.这让函数更加