Python — 面向对象进阶2
静态调用
""" 正方形的例子,如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod """ class Joker(object): def __init__(self,a,b,c,d): self.a = a self.b = b self.c = c self.d = d @staticmethod def is_valid(a,b,c,d): for i in [b,c,d]: if i != a: return False else: return True def area(self): if res == True: area_ = self.a * self.b return area_
#输出的方法一 joker = Joker(2,2,2,2) res = joker.is_valid(2,2,2,2) if res == True: print(joker.area())
#输出的方法二
def amin():
joker = Joker(2,2,2,2)
res = joker.is_valid(2,2,2,2)
if res == True:
print(joker.area())
amin()
继承
""" 继承 """ class A(object): def __init__(self): self.a = 100 self.a1 = 200 def sum_(self): SUM_ = self.a + self.a1 return SUM_ class B(A): def __init__(self): #这个init是B自身的 A.__init__(self) def print(self): res = self.sum_() print(res) b = B() b.print()
""" 带参数的继承 """ class A(object): def __init__(self,a1): self.a = 100 self.a1 = a1 def sum_(self): SUM_ = self.a + self.a1 return SUM_ class B(A): def __init__(self,a1,b1): #这个init是B自身的 self.b1 = b1 A.__init__(self,a1) def print(self): res = self.sum_() print(res) b = B(1000,'1') b.print()
装饰器
""" 装饰器的用法 """ def number(func): def warp(a,b,c): num = a + b return func(a,num,c) return warp @number def sum(n1,n2,n3): #这里的sum就相当于上面的func #这里的n,n2,n3其实就相当于上面的a,b,c #其实最后运算的三个参数 是return func(a,num,c)中的a,num,c print (n1,n2,n3) print(n1 * n2) sum(1,2,4)
# 装饰器 def Joker(func): def warp(n1,n2,n3): num = n1 + n2 return func(0,num,n3) return warp #装饰器将前两个数字求和,函数本身第三个参数乘上这个和* @Joker def SUM(num1,num2,num3): print(num1,num2,num3) print(num2 * num3) SUM(10,2,3)
""" 不定长参数,返回的是元组,**keargs返回的是字典 """ #*args def haha(*args): print(args) haha(1,2,3,4,5,6,7,8,9)
""" 不定长参数,返回的是元组,**keargs返回的是字典 """ #*args def haha(*args): print(args) haha(1,2,3,4,5,6,7,8,9) # **keargs 相当于带参数名称的传参 def lala(**kwargs): print(kwargs) lala(a=1,b=2,c=3)
""" 完整版的装饰器,里面带了不定长参数*args和**kwargs """ def deco2(param): print(param) def deco(func): def warp(*args,**kwargs): print(args) print(kwargs) kwargs['name2'] = 10000 return func(*args,**kwargs) return warp return deco @deco2(1000) def joker(name2): print(name2)
列表
列表生成式
优点: 计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况10000- 2000
缺点:占用内存
列表生成器
优点: 节约内存空间
缺点: 计算速度慢,因为要生成
# 列表生成式 a = (x for x in range(100000000000) if x % 2== 0) for i in range(100): print(next(a)) """ 列表生成式 # 列表生成式 a = [x for x in range(100000000000) if x % 2== 0] 优点: 计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况10000- 2000- 缺点: 占用内存 # 生成器 a = (x for x in range(100000000000) if x % 2== 0) 优点: 节约内存空间 缺点: 计算速度慢,因为要生成. """ import os path = '/Users/joker/jokers/DataSet/stanford-dogs-dataset/Annotation' res = os.listdir(path) print(res) genter = (dir_ for dir_ in res) print(next(genter))