<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
對於初學Python的同學來說,在class中經常看到self。那麼,到底self是個啥?
這得從物件導向說起。Python從設計之初就已經是一門物件導向的語言,在Python中建立一個類和物件是很容易的。
比如,下面的程式碼片段:定義了一個類Employee
#!/usr/bin/python # -*- coding: UTF-8 -*- class Employee: '所有員工的基礎類別' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print("Total Employee %d" % Employee.empCount) def displayEmployee(self): print("Name : ", self.name, ", Salary: ", self.salary)
類,其實就是定義現實世界中的事物,人、物、等等,任何名詞類的東西。比如上面定義的員工。
定義只是定義,我們定義了員工具有姓名、薪資這樣的屬性,但是具體到某個員工,其這些屬性值一般都不一樣。如何描述某個具體的員工?
有了定義,我們就可以建立範例了,這樣就可以描述某個具體的員工了。其他程式語言中一般用關鍵字new來建立類的範例,但是在 Python 中並沒有這個關鍵字,類的範例化類似於函數呼叫方式。
下面的程式碼:範例化Employee類
"建立 Employee 類的第一個物件" emp1 = Employee("張三", 2000) "建立 Employee 類的第二個物件" emp2 = Employee("王五", 5000)
注意:init()方法是一種特殊的方法,被稱為類別建構函式或初始化方法,當建立這個類的範例的時候,就會呼叫該方法
而self是什麼?self其實是一個預留位置,代表類的範例。 當我們用上面的程式碼建立emp1範例的時候,它代表的是emp1這個範例;當建立emp2的時候,代表的是emp2這個範例。
因此,當我們呼叫下面的實體方法的時候,會分別輸出範例的對應屬性的值:
emp1.displayEmployee() emp2.displayEmployee()
Name : 張三 , Salary: 2000 Name : 王五 , Salary: 5000
self是與類的範例相關的。當然,類本身的一些屬性和方法,是不需要範例化也存在的,千萬不要搞混淆了。
比如,前面程式碼中的自定義的類屬性empCount。以及,下面的介紹的內建屬性。
執行:
print("Employee.__doc__:", Employee.__doc__) print("Employee.__name__:", Employee.__name__) print("Employee.__module__:", Employee.__module__) print("Employee.__bases__:", Employee.__bases__) print("Employee.__dict__:", Employee.__dict__)
輸出:
Employee.__doc__: 所有員工的基礎類別
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: (<class 'object'>,)
Employee.__dict__: {'__module__': '__main__', '__doc__': '所有員工的基礎類別', 'empCount': 2, '__init__': <function Employee.__init__ at 0x0000025F73518550>, 'displayCount': <function Employee.displayCount at 0x0000025F735185E0>, 'displayEmployee': <function Employee.displayEmployee at 0x0000025F73518670>, '__dict__': <attribute '__dict__' of 'Employee' objects>, '__weakref__': <attribute '__weakref__' of 'Employee' objects>}
還有一些Python中的內建方法,在某種情況下,會自動執行。
init
前面說過的,在範例化的時候,會被呼叫執行
new
在__init__觸發前自動觸發,呼叫該類時,方法是真正的類構造方法,用於產生範例化物件(空屬性)。因此,可以重寫__new__方法來控制物件的產生過程
del
用於當物件的參照計數為0時自動呼叫。一般被垃圾回收處理時呼叫。
不一定,比如我們定義”靜態類“的時候:
class util: def checkEmployee(emp): if isinstance(emp, Employee): print("Name : ", emp.name, ", Salary: ", emp.salary) else: print("%s不是Employee" % emp)
假如,我們設計了一個工具類util:用來檢測傳入的引數是不是Employee型別,如果是的話,才進一步處理。
看下面的程式碼片段:
emp3 = "李四" util.checkEmployee(emp1) util.checkEmployee(emp2) util.checkEmployee(emp3)
輸出:
Name : 張三 , Salary: 2000
Name : 王五 , Salary: 5000
到此這篇關於一文帶你全面理解Python中的self的文章就介紹到這了,更多相關Python self內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45