一、静态方法和类方法
静态方法
需要通过修饰器@staticmethod来修饰,静态方法不需要多定义参数,可以通过对象和类来访问。
1 class PD(object): 2 def __init__(self,a,b,c,d): 3 self.a = a 4 self.b = b 5 self.c = c 6 self.d = d 7 @staticmethod 8 def is_valid(a,b,c,d): 9 for i in [b,c,d]: 10 if i != a: 11 return False 12 else: 13 return True 14 def area(self): 15 if res ==True: 16 area_ = self.a *self.b 17 return area_ 18 pd = PD(2,2,2,2) 19 res = pd.is_valid(2,2,2,2) 20 if res == True: 21 print(pd.area())
总结:静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类实例对象来引用
类方法
是类对象所拥有的方法,需要用修饰器@classmethod
来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls
作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问。
1 class A(object): 2 def __init__(self): 3 self.joker=100 4 5 @classmethod 6 def a(cls): 7 return cls() 8 9 #不需要创建A的实例,可直接用A调用a 10 joker=A.a() 11 print(joker) 12 joker2=A() 13 print(joker2
默认值
1 def say(message, times=1): 2 print(message * times) 3 4 say('Hello') #默认值是(hello,1) 5 say('World', 5) #更改后是(world,5)
总结:你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符(=
)来为字符串或参数指定默认值。
时间戳
1 from time import time,localtime,sleep 2 print(localtime(time()))
二、类与类之间的关系
继承
继承指的是类与类之间的关系是一种创建新类的方式,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类,继承又单继承和多继承。
通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人
单继承
例如:
1 class S(object): 2 def __init__(self): 3 self.a = 2 4 self.b = 4 5 6 def sum(self): 7 SUM_ = self.a + self.b 8 return SUM_ 9 10 11 class L(S): 12 def __init__(self): 13 S.__init__(self) 14 def p(self): 15 res = self.sum() 16 print(res) 17 18 z = L() 19 z.p()
使test1里的类A导入到text里
(1)from test1 import A
(2)import test1
test1.A()
为了让test只输出一个结果:if _ _name_ _ = = “_ _main_ _”
函数闭包
1 def foo(): 2 def bar(): 3 return "hello" 4 return bar 5 6 f1=foo() 7 print(f1())
列表生成式
优点: 计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况10000- 2000-
缺点: 占用内存
a = [x for x in range(1000) if x % 2== 0]
生成器
优点: 节约内存空间
缺点: 计算速度慢,因为要生成
1 a = (x for x in range(100000000000) if x % 2== 0) 2 for i in range(100): 3 print(next(a))
装饰器
1 def Joker(func): 2 3 def warp(n1,n2,n3): 4 5 num = n1 + n2 6 7 return func(0,num,n3) 8 9 return warp 10 11 12 13 #装饰器将前两个数字求和,函数本身第三个参数乘上这个和 14 15 @Joker 16 17 def SUM(num1,num2,num3): 18 19 print(num1,num2,num3) 20 21 print(num2 * num3) 22 23 24 25 SUM(10,2,3)
创建虚拟环境
- conda create --name env_name python3.7 创建虚拟环境
- conda activate env_name 进入虚拟环境
- conda env list 查看虚拟环境
- pip freeze 查看当前环境自己安装的包
- conda deactivate 退出虚拟环境
- conda env remove --name env_name 删除虚拟环境