測試奇譚,bug不見。
講解之前,我先說說我的教程和網上其他教程的區別:
1 我分享的是我在工作中高頻使用的場景,是精華內容;
2 我分享的是學習方法,亦或說,是指明你該學哪些、該重點掌握哪些內容;
這一場,主講python的物件導向的第二部分——物件的方法。
目的:掌握python物件的五個核心方法。
講解之前,先上一段**
class demo:
def __init__(self, name):
print("init")
print("init " + name)
def __new__(cls, *args, **kwargs):
print("new")
print("new " + args[0])
d = demo("張三")
通過前面的學習,你能說出這段**執行的輸出結果嗎?
答案是:
#new
#new 張三
通常,我們會認為__init__()是類的初始化方法,當例項化類之後,會優先執行它(執行後應當優先輸出"init"、"init 張三"),但實際上,__new__()方法才優先執行的方法,同時,它也是建立物件的方法。
說得通俗一點:以造房子舉例,new方法是打地基,存放建材原料,init方法則是按照圖紙建造房子。
那麼,什麼時候用new方法?
其實,用得很少,更多的時候,我們使用的是init方法。但init方法用久了之後,就會誤以為它是建立例項的方法,而實際上,new方法才是建立例項的方法。
大家謹記,以免面試時踩坑。
首先,先講講這三個方法如何使用。
class cat:
age = 5
area = 'chengdu'
def __init__(self, name):
self.name = name
# 這是乙個有問題的方法
def drink():
print("cat drink")
# 這是乙個靜態方法
@staticmethod
def eat(food):
print("cat eat {}".format(food))
# 這是乙個物件方法
def get_name(self):
return self.name
# 這是乙個類方法
@classmethod
def info(cls):
print(cls.age)
print(cls.area)
print(self.name)
# 例項化乙隻叫kitty的黑貓
black_cat = cat('kitty')
# 有問題的方法,直接報錯了
# black_cat.drink()
# 靜態方法呼叫
black_cat.eat('fish') # 可以例項(black_cat)呼叫
cat.eat('fish') # 也可以類(cat)呼叫
# 類方法呼叫
black_cat.info() # 可以例項(black_cat)呼叫
cat.info() # 也可以類(cat)呼叫
# 物件方法呼叫
print(black_cat.get_name()) # 只能例項(black_cat)呼叫
到這裡,你可能會問,這東西有啥用?
如果你只想寫個指令碼,執行一些簡單的程式,那確實沒啥用。你可以不關心這三個方法以及他們的呼叫,甚至連class類都不用寫,直接def搞定。
但是,如果你想高階,理解物件導向,它們很重要。
01 我知道,對於初學者來說,物件導向,這個抽象的概念很難理解,但是,我沒說,你一定要理解;
02 如果確實沒有編碼基礎,先學會用,在用的過程中去理解,不更好嗎?
Python 極簡教程(十四)while 迴圈
迴圈簡單來說就是讓一段 按你想要的方式多次執行。軟體擁有強大的運算能力,就是由迴圈提供的。在 python 中支援的迴圈由兩種 while迴圈 和for迴圈。現在我們先來講while迴圈。while 的中文意思為當 的時候。顧名思義,當條件滿足的時候做什麼事情。來看看 while 語句的格式 whi...
極簡Python學習教程 Class類
眾所周知,python是一門物件導向的程式語言,物件導向的程式語言 自然而然的 跟 類class 不可分割。那什麼是類class呢?類其實就是一種自定義資料型別,跟c 中的 int float double等基本資料型別 相似。類class 包含了 成員變數 和 成員函式 以下是簡單的示例 pyth...
Python 極簡教程(三)資料型別
每種語言都有各種資料型別。這就像在現實生活中,我們計數的時候需要用到數字,在表述金額 重量 距離等需要精確計數時用到小數,在日常交談中要用文字,等等。在計算機語言中,為了表述不同的情況,也需要用到各種資料型別。在 python 主要有數值型別 int,float 字串型別,布林型和空值。python...