类把数据与功能绑定在一起。创建新类就是创建新的对象 类型,从而创建该类型的新实例 。类实例具有多种保持自身状态的属性。
文章目录
前言
小结
一、类是什么?
类把数据与功能绑定在一起。创建新类就是创建新的对象 类型,从而创建该类型的新实例 。类实例具有多种保持自身状态的属性。可以面向对面
二、使用步骤
1.语法
class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart //参数直接传进来 x = Complex(3.0, -4.5)
2.作用域
代码:
def scope_test(): def do_local(): spam = "local spam" def do_nonlocal(): nonlocal spam spam = "nonlocal spam" def do_global(): global spam spam = "global spam" spam = "test spam" do_local() print("After local assignment:", spam) do_nonlocal() print("After nonlocal assignment:", spam) do_global() print("After global assignment:", spam) scope_test() print("In global scope:", spam)
结果
After local assignment: test spam After nonlocal assignment: nonlocal spam After global assignment: nonlocal spam In global scope: global spam
请注意 局部 赋值(这是默认状态)不会改变 scope_test 对 spam 的绑定。 nonlocal 赋值会改变 scope_test 对 spam 的绑定,而 global 赋值会改变模块层级的绑定。
您还可以发现在 global 赋值之前没有 spam 的绑定。
实例变量
class Dog: def __init__(self, name): self.name = name self.tricks = [] # creates a new empty list for each dog def add_trick(self, trick): self.tricks.append(trick) >>> d = Dog('Fido') >>> e = Dog('Buddy') >>> d.add_trick('roll over') >>> e.add_trick('play dead') >>> d.tricks ['roll over'] >>> e.tricks ['play dead']
迭代器
定义一个 __iter__()
方法来返回一个带有 __next__() 方法的对象。 如果类已定义了 __next__()
,则 __iter__()
可以简单地返回 self
class Reverse: """Iterator for looping over a sequence backwards.""" 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]
>>> rev = Reverse('spam') >>> iter(rev) <__main__.Reverse object at 0x00A1DB50> >>> for char in rev: ... print(char) ... m a p s
生成器
它们的写法类似于标准的函数,但当它们要返回数据时会使用 yield 语句。 每次在生成器上调用 next() 时,它会从上次离开的位置恢复执行(它会记住上次执行语句时的所有数据值)可以用生成器来完成的操作同样可以用前一节所描述的基于类的迭代器来完成。 但生成器的写法更为紧凑,因为它会自动创建 __iter__()
和 __next__() 方法
def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index]
>>> for char in reverse('golf'): ... print(char) ... f l o g
https://docs.python.org/zh-cn/3/tutorial/classes.html