面向对象的进阶2
 一、静态调用和类的调用1、如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod
例题:输入四条边判断它是否是一个正方形,如果是计算面积
复制代码
 class Zfx (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_
 zfx=Zfx(8,8,8,8)
 res = zfx.is_valid(8,8,8,8)
 if res==True:
 print(zfx.area())输出:64
 复制代码
 2、@classmethod:获取自身类(cls)中的属性,并且可以更改.
 classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等例题:
复制代码
 class A(object):
 def init(self):
 self.jxh = 100
 @classmethod
 def a(cls):
 return cls()
 c = A.a()
 print (c.jxh)输出:100
 复制代码
 3、from time import time,localtime,sleep
 print(time())输出:1565255554.80476
 输出的是时间戳,是从1970年1月1号00.00.00秒到现在2019/8/817:18:25秒整理过的秒速二、继承
复制代码
 class A(object):
 def init(self):
 self.a=111
 def A1(self):
 print(‘A1’)
 #在类名中写上继承的类
 class B(A):
 def init(self):
 A. init(self)
 self.a=200
 def B1(self):
 print(‘B1’)
 c=B()
 print(c.a)
 c.A1()输出:100
 A1
 复制代码
 例题1:创建一个父类和一个子类父类计算两个数字的和为SUM_

          子类打印这个SUM_复制代码
 class A(object): #A父类
 def init(self):
 self.a=10
 self.a1=20
 def sum_(self):
 SUM_=self.a+self.a1
 return SUM_
 class B(A): #B继承A
 def init(self):
 A. init(self) #继承A中所有
 def B1(self):
 res = self.sum_()
 print(res)
 b=B()
 b.B1()输出:30
 复制代码
 三、1、列表生成式----[ ]
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-
 缺点: 占用内存2、列表生成器----( )
a = (x for x in range(100000000000) if x % 2== 0)
 优点: 节约内存空间
 缺点: 计算速度慢,因为要生成.四、函数闭包
所谓的函数闭包本质是函数的嵌套和高阶函数。我们来看看要实现函数闭包要满足什么条件(缺一不可):
1)必须嵌套函数
 2)内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
 3)外部函数必须返回内嵌函数——必须返回那个内部函数
 闭包的作用:可以保持程序上一次运行后的状态然后继续执行。
 实例如下:按 Ctrl+C 复制代码
def foo( ):
 def bar( ):
 return ‘hello’
 return bar( )
 a = foo( )
 print (a)输出:hello
 按 Ctrl+C 复制代码五、装饰器
 实例1:创建一个装饰器,一个函数(两个参数)
 用装饰器处理两个参数和,并打印
 复制代码
 def deco(func):
 def warp(a1,a2):
 print(‘a1+a2’,a1+a2)
 return func(a1,a2)
 return warp
 @deco
 def SUM(a1,a2):
 print(a1,a2)
 SUM(100,100)输出 a1+a2 200
 复制代码实例2:
按 Ctrl+C 复制代码
def jxh(func):
 def warp(n1,n2,n3):
 num = n1 + n2
 return func(0,num,n3)
 return warp
 #装饰器将前两个数字求和,函数本身第三个参数乘上这个和
 @jxh
 def SUM(num1,num2,num3):
 print(num1,num2,num3)
 print(num2 * num3)SUM(10,2,3)
输出:0 12 3
 按 Ctrl+C 复制代码