一、类(PT第九章) 9.3.4 方法对象
class MyClass: """A simple example class""" i = 12345 def f(self): return "hello world" xf = x.f while True: print xf()
9.3.5 类和实例变量方法的特别之处在于实例对象被作为函数的第一个参数传给了函数。在我们的示例中,调用x.f()完全等同于MyClass.f(x)。一般情况下,以n
个参数的列表调用一个方法就相当于将方法所属的对象插入到列表的第一个参数的前面,然后以新的列表调用相应的函数。如果你还是不明白方法的工作原理,了解一下它的实现或许有帮助。引用非数据属性的实例属性时,会搜索它的类。如果这个命名确认为一个有效的类属性即函数对象,就会将实例对象和函数对象封装进一个抽象对象:这就是方法对象。以一个参数列表调用方法对象时,它被重新拆封,用实例对象和原始的参数列表构造一个新的参数列表,然后以这个新的参数列表调用对应的函数对象。
一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:
class MyClass: """A simple example class""" i = 12345 def f(self): return "hello world" a=MyClass() b=MyClass() print a.i is b.i print a.i is MyClass.i a.i=5 print a.i is b.i print a.i is MyClass.i
重要的警告:默认值只计算一次。这使得默认值是可变的对象如列表、字典或大部分类的实例时会有所不同
class MyClass: """A simple example class""" i = 12345 def f(self): return "hello world" def t(self,L=[]): L.append("a") return L a=MyClass() b=MyClass() print a.t() print b.t()9.4 补充说明
通常,方法的第一个参数称为self。这仅仅是一个约定:名字self对 Python 而言绝对没有任何特殊含义。但是请注意:如果不遵循这个约定,对其他的 Python 程序员而言你的代码可读性就会变差,而且有些类 查看 器程序也可能是遵循此约定编写的。
问题:为啥p方法访问不到o,但如果在__init__函数里定义了o就可以访问呢
class MyClass: """A simple example class""" i = 12345 def f(self): self.o=123 return "hello world" def t(self,L=[]): L.append("a") return L def p(self): print self.o a=MyClass() a.p()9.8 异常也是类
class B: pass class C(B): pass class D(C): pass for c in [B, C, D]: try: raise c() except D: print "D" except C: print "C" except B: print "B"9.9 迭代器
class Reverse: """Iterator for looping over a sequence backwards.""" def __init__(self, data): self.data = data self.len=len(data) self.index=-1 def __iter__(self): return self def next(self): if self.index == self.len-1: self.index=-1 raise StopIteration self.index = self.index + 1 return self.data[self.index] r=Reverse("abc") for x in r: print x print r.index二、标准库概览(PT第十、十一章)
导入模块语句
模块即为一个py文件,模块名就是py文件名去掉.py,import后面接的就是模块名,不同的模块可以放在不同的包(就是文件夹啦,from后面接的那个就是包名)里,导入方法有两种,比如包名叫做package,模块名叫module,这个模块里有个方法叫做function(),有个类叫Class
方式1:
import package.module #调用方法的方式为 package.module.function()
import package.module #调用方法的方式为 package.module.Class()
方式2:
from package import module #调用方法的方式为 module.function()
而且,import后面可以接模块内的方法名,from后面接模块名,比如:
from package.module import function #可以直接调用 function()
from package.module import Class #可以直接调用 Class()
然而并不存在import package.module.function的用法
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/40664.html
摘要:我们将会创建一个简单的,来让管理员能够查看和编辑和。我们将会在接下来的例子中使用这个账户。创建一个新的模块叫。但是是一个好的设计。最后,我们使用来导入默认的登录登出这是可选的。我们想启用分页和只有用户能够调用。 Quickstart 我们将会创建一个简单的API,来让管理员能够查看和编辑Users和Groups。 项目开始 创建一个新的项目叫 tutorial,然后创建一个app叫qu...
摘要:我们将会创建一个简单的,来让管理员能够查看和编辑和。我们将会在接下来的例子中使用这个账户。创建一个新的模块叫。但是是一个好的设计。最后,我们使用来导入默认的登录登出这是可选的。我们想启用分页和只有用户能够调用。 Quickstart 我们将会创建一个简单的API,来让管理员能够查看和编辑Users和Groups。 项目开始 创建一个新的项目叫 tutorial,然后创建一个app叫qu...
摘要:我们将会创建一个简单的,来让管理员能够查看和编辑和。我们将会在接下来的例子中使用这个账户。创建一个新的模块叫。但是是一个好的设计。最后,我们使用来导入默认的登录登出这是可选的。我们想启用分页和只有用户能够调用。 Quickstart 我们将会创建一个简单的API,来让管理员能够查看和编辑Users和Groups。 项目开始 创建一个新的项目叫 tutorial,然后创建一个app叫qu...
摘要:测试这是一个测试链接。注意编写注释是一个好的习惯。包括各个字段的验证标记,例如。字段标记也能够控制在某些环境中如何显示,例如呈现为之前的标记相当于中的。类似于有和类,也包含和两个类。 Serialization——序列化 官网地址 前言 本教程将会介绍创建一个简单webAPI。在整个学习的过程中,将会逐一介绍到REST framework的各种组件,让你全面的了解所有东西是如果组合在一...
摘要:测试这是一个测试链接。注意编写注释是一个好的习惯。包括各个字段的验证标记,例如。字段标记也能够控制在某些环境中如何显示,例如呈现为之前的标记相当于中的。类似于有和类,也包含和两个类。 Serialization——序列化 官网地址 前言 本教程将会介绍创建一个简单webAPI。在整个学习的过程中,将会逐一介绍到REST framework的各种组件,让你全面的了解所有东西是如果组合在一...
阅读 2983·2023-04-26 00:23
阅读 3398·2021-09-13 10:28
阅读 2177·2021-08-31 14:18
阅读 2883·2019-08-30 15:54
阅读 1938·2019-08-30 15:43
阅读 1275·2019-08-29 16:56
阅读 2799·2019-08-29 14:16
阅读 2052·2019-08-28 17:51