日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

關于對python中self的深入理解_python

作者:綠蘿12345 ? 更新時間: 2022-11-07 編程語言

假設有一個類nameMain(), 如最下面代碼

  • 類 : 一個抽象的模板。可以理解為抽象設計圖
  • 類名:類的名字。
    查看/實現方式 :print(nameMain)或者print(self.class)
  • 類的實例:即類創建的對象,類每創建一個實例就開辟新的內存地址指向這個創建的實例。抽象設計圖具體實現的東西
    查看/實現方式 : a=nameMain(帶參/無參)
  • self : 表示類創建的實例/對象本身,指向當前創建對象的內存地址。在__init__魔方方法中創建

類可以創建很多不同的實例,這些實例又有自己特定的特征,如何很好的調用和匹配好 所創建的實例對象 及其特征 就需要self。

理解:

例如 :類中創建了對象a和對象b, self對象就是a和b對象的抽象的統稱,關于對象a和對象b的特征,可以用self來調用,當self指向a時就指向a的內存地址,可以調用a的特征;同理self指向對象b就指向b的內存地址,就可以調用b的特征。

比如 : 可以把 對象a 和 對象b 理解成 客戶a 和 客戶b, 類理解為某個房子。這時候客戶a和客戶b都買了同一個設計圖出的房子,但是他們想要自己的裝修風格,這些裝修風格就是對象a、對象b的特征。當裝修隊開始裝修房子時,先選擇具體客戶,然后根據客戶要求裝修;而先服務哪個客戶呢?客戶就選擇self客戶管理工具指向的現在的客戶,同時self還可以調用對象的特征,這時候根據self指示的客戶和self調用客戶要求的裝修風格來裝修房子。

  • 客戶a=類的對象a;
  • (客戶要求的)裝修風格=對象a/b的特征;
  • 房型=類 裝修隊=代碼的執行

具體代碼:

""" self的理解 :
    1, self表示類的實例 或 對象, 指向當前對象的內存地址 (self不指向類本身,而是類創建的實例/對象)
    2, 類中定義的函數的self 與 init中self的內存地址 + 創建實例的內存地址 保持一致(都指向同一個內存地址)
    3, self.__class__ 用來查看當前類名,相當于print(nameMain)
    """
class nameMain(object):
    def __init__(self, name, age):
        print("init中的self={}".format(self))
        print("self.__class__用于查看當前類名 : ", self.__class__)
        self.name = name
        self.age = age

    def printStu(self):
        print("def中的self={}".format(self))
        return "name={}, age={}".format(self.name, self.age)
        
if __name__ == "__main__":
    a = nameMain("immuable", 18)
    print("a = {}".format(a))  # self 打印地址=對象a的地址
    print(a.printStu())
    print()
    b=nameMain("muable", 100)  # self 打印地址=對象b的地址
    print("b = {}".format(b))
    print(b.printStu())

輸出

# 對象a
init中的self=<__main__.nameMain object at 0x0000022E78A2F8D0>
self.__class__用于查看當前類名 : ?<class '__main__.nameMain'>
a = <__main__.nameMain object at 0x0000022E78A2F8D0>
def中的self=<__main__.nameMain object at 0x0000022E78A2F8D0>
name=immuable, age=18

#對象b
init中的self=<__main__.nameMain object at 0x0000022E78A2F828>
self.__class__用于查看當前類名 : ?<class '__main__.nameMain'>
b = <__main__.nameMain object at 0x0000022E78A2F828>
def中的self=<__main__.nameMain object at 0x0000022E78A2F828>
name=muable, age=100

self的值是什么?

self的值是Python會自動賦值的,而且值是對象本身。舉例說明:類Dog,他的實例是d,那么,d調用類的方法jian(arge1,arge2)的時候,Python會自動轉為Dog.jian(d,arge1,arge2)。self的值是Dog的實例d。

以下例子,打印self的值。(打印結果中的intance是實例的意思)

總結

原文鏈接:https://blog.csdn.net/weixin_46220517/article/details/124792255

欄目分類
最近更新