迭代器
第一次接触,类似于for循环个人感觉 (虽然写了这么个例子,但是不知道迭代器用在哪里,等以后写写代码看看)
class 迭代器: def __init__(self,num): self.num = num def __next__(self): if self.num<=0: raise StopIteration self.num=self.num-1 return self.num def __iter__(self): return self for i in 迭代器(1000): print(i)
生成器
for循环的变异体,个人理解是为了节约资源(用的比较少,scapy中可能会用到)
def shengchengqi(): url =0 for i in range(1111): yield url print("你生成了%s个url"%url) response = shengchengqi() for i in range(11): print(next(response))
super 调用超类的方法
简单理解就是继承过程中,子类如果有跟父类一样的方法,用supper直接继承
class A: def say(self): print("我是A类的say方法") class B(A): def say(self): print("我是B类的say方法") super(B, self).say() # # class C: # def say(self): # print("我是C类的say方法") b = B() b.say()
set get del (没学会)
hasattr getattr setattr
这三个就是操作类中的属性,判断、取出之类的,个人感觉平常开发用不到,框架可能会用,先略过,继续往下
property
把方法当作属性
class A: def foo(self): return 50011 a= A() res = a.foo() print(res) #只是获取一个返回值,还要把他实例化类 再调用方法,很麻烦,所以出来了property 改写 class A: def __init__(self,r,w): self.r = r self.w = w @property #在这里用上 def foo(self): resone =self.r*self.w return resone a= A(100,4) res = a.foo #这里相当于直接调用属性,没有括号了,没理解还是,加括号怎么了,不是一样的效果吗 print(res)
可变对象和不可变对象
个人理解是改变了内容内存地址能不能改变,内存地址变化就是可变,反之为不可变
不可变:整数 字符串 元组
可变:字典 列表
new方法
new方法用于操作不可变对象(很少用到)
def里面的init不是第一个方法,new才是,这个很少用,用到再说
repr和str方法
__repr 常用于python2
__str常用于python3
简单的理解就是打印显示一个类的功能概念,而不是输出一个内存地址
class A(): def __str__(self): return "这个类是我用来测试的,想说明__str是用来介绍类的功能" def __init__(self,val,name): self.val=val self.name=name a = A('mingcheng','wahah') print(a)