day 03 python——面向对象编程进阶

一、静态方法和类方法

静态方法

需要通过修饰器@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 
 3def warp(n1,n2,n3):
 4 
 5 ​        num = n1 + n2
 6 
 7return func(0,num,n3)
 8 
 9return warp
10 
11 
12 
13 #装饰器将前两个数字求和,函数本身第三个参数乘上这个和
14 
15 @Joker
16 
17 def SUM(num1,num2,num3):
18 
19print(num1,num2,num3)
20 
21print(num2 * num3)
22 
23 
24 
25 SUM(10,2,3)

创建虚拟环境

  1. conda create --name env_name python3.7     创建虚拟环境
  2. conda activate env_name  进入虚拟环境
  3. conda env list  查看虚拟环境
  4. pip freeze  查看当前环境自己安装的包
  5. conda deactivate  退出虚拟环境
  6. conda env remove --name env_name   删除虚拟环境
原文地址:https://www.cnblogs.com/hisashi-mitsui/p/11322115.html