day 03 python——面向對象編程進階

1、靜態方法和類方法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())

總結:靜態方法中不須要額外定義參數,所以在靜態方法中引用類屬性的話,必須經過類實例對象來引用spa

類方法code

是類對象所擁有的方法,須要用修飾器@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

 

默認值blog

1 def say(message, times=1):
2     print(message * times)
3 
4 say('Hello') #默認值是(hello,1)
5 say('World', 5) #更改後是(world,5)

總結:你可能爲但願使一些參數可選並使用默認的值,以免用戶不想爲他們提供值的狀況。默認參數值能夠有效幫助解決這一狀況。你能夠經過在函數定義時附加一個賦值運算符(=)來爲字符串或參數指定默認值。繼承

時間戳ip

1 from time import time,localtime,sleep
2 print(localtime(time()))

2、類與類之間的關係內存

繼承

繼承指的是類與類之間的關係是一種建立新類的方式,新建的類能夠繼承一個或多個父類,父類又可稱爲基類或超類,新建的類稱爲派生類或子類,繼承又單繼承和多繼承。

經過繼承創建了派生類與基類之間的關係,它是一種'是'的關係,好比白馬是馬,人是動物。 當類之間有不少相同的功能,提取這些共同的功能作成基類,用繼承比較好,好比老師是人,學生是人

單繼承

例如:

 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   刪除虛擬環境
相關文章
相關標籤/搜索