Python入門之路(14)

2021-10-24 11:35:27 字數 4280 閱讀 4981

• 屬性

• 類屬性,直接在類中定義的屬性是類屬性

• 類屬性可以通過類或類的例項訪問到。但是類屬性只能通過類物件來修改,無法通過例項物件修改

• 例項屬性 通過例項物件新增的屬性屬於例項屬性

• 例項屬性只能通過例項物件來訪問和修改,類物件無法訪問修改

• 方法

• 在類中定義,以self為第乙個引數的方法都是例項方法

• 例項方法在呼叫時,python會將呼叫物件以self傳入

• 例項方法可以通過類例項和類去呼叫

• 當通過例項呼叫時,會自動將當前呼叫物件作為self傳入

• 當通過類呼叫時,不會自動傳遞self,我們必須手動傳遞self

• 類方法 在類的內容以@classmethod 來修飾的方法屬性類方法

• 類方法第乙個引數是cls 也會自動被傳遞。cls就是當前的類物件

• 類方法和例項方法的區別,例項方法的第乙個引數是self,類方法的第乙個引數是cls

• 類方法可以通過類去呼叫,也可以通過例項呼叫

• 靜態方法

• 在類中用@staticmethod來修飾的方法屬於靜態方法

• 靜態方法不需要指定任何的預設引數,靜態方法可以通過類和例項呼叫

• 靜態方法,基本上是乙個和當前類無關的方法,它只是乙個儲存到當前類中的函式

• 靜態方法一般都是些工具方法,和當前類無關

classa:

# 類屬性 直接在類中定義的屬性

# 類屬性只能通過類物件修改,無法通過例項物件來修改

count =

0def

__init__

(self)

:# 例項屬性 是通過例項物件新增的屬性

# 例項屬性只能通過例項物件來訪問和修改,類物件無法訪問和修改

self.name =

'葫蘆娃'

# 例項方法 在類中定義,以self為第乙個引數的方法都是例項方法

deftest

(self)

:print

('這是test方法...'

)# 類方法 類方法和例項方法的區別,例項方法的第乙個引數是self,類方法的第乙個引數是cls

# 類方法第乙個引數是cls 也會自動被傳遞。cls就是當前的類物件

# 類方法以@classmethod 來修飾的方法

# 類方法可以通過類呼叫,也可以通過例項呼叫

@classmethod

deftest2

(cls)

:print

('這是test方法,它是乙個類方法'

)print

(cls.count)

# 靜態方法 基本上都是乙個與本類無關的方法,用@staticmethod來修飾的方法屬於靜態方法

# 靜態方法不需要指定任何的預設引數,靜態方法可以通過類和例項呼叫

# 靜態方法一般都是些工具方法,和當前類無關

@staticmethod

deftest3()

:print

('是test方法,它是乙個靜態方法'

)

a = a(

)# 例項屬性,通過例項物件新增的屬性稱為例項屬性

a.count =

20print

(a.count)

# 0print

(a.count)

# 20

print

(『a』,a.name)

print

('a'

,a.name)

a.test(

)a.test(a)

# 用類物件去呼叫例項方法,需要傳遞例項化物件,否則不知道找哪個例項的方法

a.test2(

)a.test2(

)

模組化將乙個完整的程式分成乙個個小模組

通過模組組合搭建乙個完整的程式

模組化的優點;

方便開發

方便維護

模組復用

在python當中乙個py檔案就是乙個模組

在乙個模組中引入外部模組,可以引入同乙個模組多次,但是模組的例項只會執行一次

import 模組名

模組名就是python的檔名

import 模組名 as 模組別名

在乙個模組內部都有乙個__name__,通過print(name)可以獲取模組的名字(不在主檔案中執行);

如果print(name)在py檔案直接執行時,那麼__name__預設等於字串』main』。__name__屬性值為__main__的模組是主模組。乙個程式中只有乙個主模組

訪問模組中的變數–>模組名.變數名

訪問模組中的函式–>模組名.函式名

訪問模組中的物件–>模組名.物件名

我們也可以引入模組中部分內容

from 模組名 import 變數,變數…

還有一種引入方式

from 模組名 import 變數 as 別名

舊的列表 —> 新的列表

語法:[表示式 for 變數 in 舊的列表]

[表示式 for 變數 in 舊的列表 if 條件]

# 找到長度大於3的人名

lst =

['jerry'

,'tony'

,'tom'

,'mok'

,'abcd'

]def

fn(lst)

: new_lst =

for name in lst:

iflen

(name)

>

3:

# 找到長度大於3的人名

lst =

['jerry'

,'tony'

,'tom'

,'mok'

,'abcd'

]r =

[name.capitalize(

)for name in lst if

len(name)

>3]

print

(r)

# 1-100能被3整除的列表

new_lst =

[n for n in

range(1

,101

)if i %3==

0]print

(new_lst)

有一種一邊迴圈一邊計算的機制,稱為生成器

建立生成器的方法

通過列表推導式

# 需求: 得到乙個0-10之間的數,並和3相差的列表

# new_lst = [i * 3 for i in range(10)]

# print(new_lst)

g =(i *

3for i in

range(10

))print

(type

(g))

# print

(g)#

# 方式一 __next__() 獲得元素

print

(g.__next__())

# 0print

(g.__next__())

# 3# 方式二 next()函式 獲取元素

print

(next

(g))

# 6print

(next

(g))

# 9print

(next

(g))

# 12

print

(next

(g))

# 15

# 當所有元素均生成後繼續再呼叫會報錯

通過函式來完成

只要在函式中新增yield關鍵字,該函式就會變成乙個生成器

a. 定義乙個函式,函式中使用yield關鍵字

b. 呼叫函式,接收呼叫結果

c. 得到的結果就是乙個生成器

d. 通過next()和__next__()就可以獲取生成器的元素

deffn(

):n =

0while

true

: n +=

1yield n

n = fn(

)print

(n)#

print

(next

(n))

# 1print

(next

(n))

# 2

python入門14模組

1.模組概述 為了解決難以維護的問題,我們把很多相似功能的函式分組,分別放到不同的檔案中。這樣每個檔案所包含的內容相對較少,而且對於每乙個檔案的大致功能可用檔名來體現 優點 1.提高 的可維護性 2.提高了 的復用度,當乙個模組完畢,可以被多個地方引用 3.引用其他的模組 內建模組和第三方模組和自定...

python成長之路day14

1 什麼是裝飾器 器指的是工具 裝飾指的是為被裝飾物件新增額外的功能 大白話 定義裝飾器就是定義了乙個函式,該函式就是用來為其他函式新增額外的功能 2 為何要用裝飾器 程式的開發徐亞哦遵循乙個原則 開放封閉原則 開放 值得是對拓展功能開放 封閉 指的是對修改源 封閉 def func sdfasd ...

python 入門之路(3)

1.1 表示式 由數字 算符 數字分組符號 自由變數和約束變數等以求得數值的有意義排列方法所得的組合 其特點包括表示式一般僅僅用於計算一些結果,不會對程式產生實質性的影響 如果在互動模式中輸入乙個表示式,直譯器會自動將表示式的結果輸出 如在pycharm中輸入 2 3print 2 3 1.2 語句...