日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

关于python 类的使用

發布時間:2025/10/17 python 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于python 类的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用的時候發現關于 python 的一些知識已經忘記一些了,還需要重新查找。

以下是根據記憶和查找網上資料完成的。

1 類命名的形式

(正確)

class One(object):def one_1(self, a):print("a:", a)

object - 父類的名稱,表示繼承自 object 類。

要是沒有父類,也可以直接寫程 object ,如上個代碼并沒有父類,這樣寫可以。但是如下縮寫,就不符合 PEP8 要求(可以運行,但不規范),會提示你刪掉括號。

(不太正確)

class One():def one_1(self, a):print("a:", a)

刪除括號后,即為

(正確)

class One:def one_1(self, a):print("a:", a)

也可以理解為,若沒有父類,可以什么都不寫

2 類的使用

2.1 正確用法

示例

(?錯誤)

1 class one: 2 def one_1(self, a): 3 print("a:", a) 4 5 get_one = one 6 get_one.one_1(2)

運行

File "C:/Users/Administrator/Desktop/tf.py", line 6, in <module>get_one.one_1(2) TypeError: one_1() missing 1 required positional argument: 'a'

報錯:one_1 函數缺少一個位置參數,“a”。

我們將傳參做修改,變成兩個參數。

(錯誤?,但可以運行)

1 class one: 2 def one_1(self, a): 3 print("self:",self) 4 print("a:", a) 5 6 get_one = one 7 get_one.one_1(2,3)

運行

self: 2 a: 3

很明顯,這是由于類沒有實例化造成的,?get_one = one?只是將類 one 當成一個“變量”賦值給 get_one(實際上是傳遞了地址),而不是實例化。

將上述代碼進行修改,實現類的實例化。

(正確?)

class one:def one_1(self, a):print("a:", a)get_one = one() get_one.one_1(2)

運行

a: 2

2.2 類的實例化 or 賦值——id( )

關于類的賦值還是實例化看其內存地址就可以了(不要較真 深拷貝)。

很明顯地址一樣的話,肯定是賦值,意味 one 和 get_one_f 指向同一個地址。

實例化則不然,類 one 是一個抽象的“模板”,而實例化的 get_one_s 是一個具體的“對象”,是一個變量;所以它們的地址肯定不一樣,經過代碼測試確實不是同一地址。

需要注意的是,實例化后的每一個“個體”的地址是不一樣的。

class one:def one_1(self, a):print("a:", a)# 賦值 get_one_f = one print("id(one):", id(one)) print("id(get_one_f):", id(get_one_f)) # id(one): 2730363295608 # id(get_one_f): 2730363295608# 實例化 get_one_s = one() print("id(one):", id(one)) print("id(get_one_s):", id(get_one_s)) # id(one): 2730363295608 # id(get_one_s): 2730377568384

2.3 類的實例化 or 賦值——type()

class one:def one_1(self, a):print("a:", a)print("type(one):", type(one)) print("type(one()):", type(one())) # type(one): <class 'type'> # type(one()): <class '__main__.one'>

實例化后的變量可以綁定類中的方法或屬性,即?one().one_1(2)?

2.4 類中 self 的含義

從上面的運行情況可知,類中self 含義是不一樣的。

賦值實例化時
class one:def one_1(self, a):print("self:", self)print("a:", a)get_one = one get_one.one_1(2, 3)

# self: 2 # a: 3

?

class one:def one_1(self, a):print("a:", a)print("self :", self)get_one = one() get_one.one_1(2) print("get_one:", get_one) # a: 2 # self : <__main__.one object at 0x00000183C6926048> # get_one: <__main__.one object at 0x00000183C6926048>

?

?

在看兩者的區別時,我們先知悉以下內容:

為了比較,其實我沒有添加 __init__ 方法,在該方法中,第一個參數一定是 self,其表示創建實例本身;因此,在 __init__ 方法內部,就可以把各種屬性綁定到 self,因此self就指向創建的實例本身。

?

接下來分析賦值與實例化時的self的含義:

1 賦值時,相當于直接調用類 one 中的 one_1 方法,此時 one_1 僅僅是一個非常普通的函數,而不是一個 ”特殊的函數“。

類中的方法可以當成一個特殊的函數,一個重要的特殊點在于它能夠調用類內的屬性。

此時?one_1(self, a)?函數中相當于兩個常規變量,而不是 “實例化指針”。

?

2 實例化時,我們實例化例子,self 和 get_one 兩者地址是一樣的,也就是說,self 就是創建實例本身,凸顯類內 “函數” 的特殊性;所以此時只有一個參數。

?

self : <__main__.one object at 0x00000183C6926048> get_one: <__main__.one object at 0x00000183C6926048>

?

?

?

此時,我想應該可以類比于古代的攻城作戰,城池相當于一個類;

當敵人從“外郭”進攻時,堡壘內的所有的兵、民等所有力量都能被調動,這就是實例化;

當敵人直接空降“內城”,對“內城”中的大 BOSS 直接來個斬首行動,這時候“城外”的力量還沒有回過神時已經完成作戰任務,取走了所需要的“函數”。

所以“空降斬首”明顯不現實,不是常規操作。

?

3 相關參考

廖雪峰 類和實例?https://www.liaoxuefeng.com/wiki/897692888725344/923030500932512

Python中self用法詳解https://blog.csdn.net/CLHugh/article/details/75000104

?

轉載于:https://www.cnblogs.com/gengyi/p/11623442.html

總結

以上是生活随笔為你收集整理的关于python 类的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。