首页 > 代码库 > Python Tutorial笔记--9.类
Python Tutorial笔记--9.类
看Tutorial的一些问题与解决
九.类
9.3.4 方法对象
class MyClass: """A simple example class""" i = 12345 def f(self): return ‘hello world‘ xf = x.f while True: print xf()
引用:方法的特别之处在于实例对象被作为函数的第一个参数传给了函数。在我们的示例中,调用x.f()完全等同于MyClass.f(x)。一般情况下,以n 个参数的列表调用一个方法就相当于将方法所属的对象插入到列表的第一个参数的前面,然后以新的列表调用相应的函数。如果你还是不明白方法的工作原理,了解一下它的实现或许有帮助。引用非数据属性的实例属性时,会搜索它的类。如果这个命名确认为一个有效的类属性即函数对象,就会将实例对象和函数对象封装进一个抽象对象:这就是方法对象。以一个参数列表调用方法对象时,它被重新拆封,用实例对象和原始的参数列表构造一个新的参数列表,然后以这个新的参数列表调用对应的函数对象。
9.3.5 类和实例变量
一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:
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 程序员而言你的代码可读性就会变差,而且有些类 查看 器程序也可能是遵循此约定编写的。
问题:
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()
为啥p方法访问不到o,但如果在__init__函数里定义了o就可以访问呢
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
9.11 生成器表达式
这是个啥
Python Tutorial笔记--9.类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。