2019年8月8日(面向对象编程进阶2)
1、静态方法和类方法
"""
如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod
"""
如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod
"""
# 静态方法和类方法都是通过给类发消息来调用的
# 也可以通过给类发消息来调用对象方法但是要传入接收消息的对象作为参数
class A(object): @staticmethod def a(): print('a') a1 = A() a1.a() a
案例1:
#输入四条边,判断它是否是一个正方形
#如果是:计算面积
class zhengfangxing(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): area_ = self.a * self.b return area_ def amin(): zhengfangxing = zhengfangxing(2,2,2,2) res = zhengfangxing.is_valid(2,2,2,2) if res == True: print(zhengfangxing.area()) amin()
时间:
from time import time,localtime,sleep
print(time()) #时间戳,从1970年1月1号00.00.00秒开始到现在经历过的秒数
pritn(localtime()) #经历的天数
@classmethod 获取自身类(cls)中的属性,并且可以更改
#用类方法就可以改变类的属性
class A(object):
def __init__(self):
self.joker = 100
@classmethod
def a(cls):
return cls()
joker = A.a()
print(joker)
joker2 = A()
joker2.joker_1 = 1000
print(joker2)
<__main__.A object at 0x000001FC2D822E10>
<__main__.A object at 0x000001FC2D822F28>
2、继承和多态
class A(object): def __init__(self): class A(object): def __init__(self): self.a = 100 def A1(self): print('A1') #在类名中写上继承的类。 class B(A): def __init__(self): A.__init__(self) self.b = 200 #self.b1 = b1 def B1(self): print('B1') b_ = B() print(b_.a) b_.A1() self.a = 100 def A1(self): print('A1') #在类名中写上继承的类。 class B(A): def __init__(self): A.__init__(self) self.b = 200 #self.b1 = b1 def B1(self): print('B1') b_ = B() print(b_.a) b_.A1() 100 A1
案例2:
#创建一个父类,创建一个子类
#父类计算两个数字的和记为SUM_
#子类打印这个SUM_
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):
A.__init__(self)
def Print(self):
res = self.sum_()
print(res)
b = B()
b.Print()
300
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): A.__init__(self,a1)#supper(A,self),_init(a1) def Print(self): res = self.sum_() print(res) b = B(1000,'100') b.Print() 1100
创建虚拟环境
- conda create --name env_name python3.7 创建虚拟环境
- conda activate env_name 进入虚拟环境
- conda env list 查看虚拟环境
- pip freeze 查看当前环境自己安装的包
- conda deactivate 退出虚拟环境
- conda env remove --name env_name 删除虚拟环境
3、 列表生成式
1) 列表生成式
a = (x for x in range(100000000000) if x % 2== 0)
for i in range(100):
print(next(a))
for i in range(100):
print(next(a))
优点: 计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况10000- 2000-
缺点: 占用内存
缺点: 占用内存
2) 生成器
a = (x for x in range(100000000000) if x % 2== 0)
优点: 节约内存空间
缺点: 计算速度慢,因为要生成.
优点: 节约内存空间
缺点: 计算速度慢,因为要生成.
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)
5、函数闭包
案例4:
#创建一个装饰器,三个函数(两个参数)
#装饰器处理这两个参数的和,并打印
#装饰器处理这两个参数的和,并打印
#每一个函数打印这两个参数
def Joker(func): def warp(num1,num2): print('num1+num2=',num1 + num2) return func(num1,num2) return warp @Joker def SUM(num1,num2): print(num1,num2) SUM(100,200) num1+num2= 300 100 200
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) 0 12 3 36