七,Class
- nonlocal和global关键字
def scope_test(): def do_local(): spam = "local spam"
def do_nonlocal(): nonlocal spam #nonlocal 将引用外层已存在变量,但非全局变量 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) |
- 类基本定义格式
class MyClass: a=1234; #直接在类里的会变为静态变量被所有对象共用,称为类变量
#构造函数 def __init__(self,value): self.i=value #属性定义和赋值应该在构造函数里,称为实例变量 self.__private="privatevalue"#私有变量 #析构函数 def __del__(self): pass #函数定义 def f(self): return 'hello world' |
继承父类: |
class DerivedClassName(BaseClassName): #多重继承(name, name, name) |
- Isinstance()——判断一个对象是否是类的一个实例
Issubclass()——判断一个类是否是另一个类的子类
- 在类中实现__iter__和__next__函数可以实现迭代器,用于for a in b语句
#自定义类中实现迭代器 class MyItertator: #构造函数 def __init__(self,data): self.data=data self.index=len(data)
#定义__iter__和__next__用来实现迭代器 def __iter__(self): return self
def __next__(self): if self.index == 0: raise StopIteration self.index =self.index-1 return self.data[self.index]
#使用示例 my=MyItertator("barret") for m in my: print(m) |
- yield关键字可以自动生成__iter__和__next__函数,实现迭代器。
其内在逻辑为:yeild将语句执行的结果全部保存,在调用迭代器的__next__方法时,yield会从保存的数据中取一个值,直到所有值取完。
#使用yield自动生成迭代器 def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index] #保存了for语句的所有执行结果
for char in reverse('golf'): #这里char或映射到yield保存的每个结果 print(char) |