一文帶你弄懂Python3中的def?__init__
前言
在學習python-100-days時,在面向對象編程基礎的那一塊,封裝一個class時,突然出現(xiàn)def __init__的方法,剛開始時,對他的理解很模糊,為什么定義一個類需要用到def __init__。
于是翻找了一些資料,大概就是兩種定義方式如下:
第一種定義方式如下:
class Student(object):
# __init__是一個特殊方法用于在創(chuàng)建對象時進行初始化操作
# 通過這個方法我們可以為學生對象綁定name和age兩個屬性
def __init__(self, name, age):
self.name = name
self.age = age上面這一種,是在學習python-100-days時,里面的一種定義方式。里面是包含兩個參數(shù) name 和 age。在實例的時候,必須要傳入這兩個參數(shù)的值進去。
stu = Student() # 報錯
如果上面直接實例它的話就會報錯:TypeError missing 2 required positional arguments: 'name' and 'age'
正常情況下,我們應該傳入?yún)?shù):
stu = Student('大冰', 19) # 正常實例然后我們可以利用__dict__方法查看對象的屬性。
print(stu.__dict__) # 打印出: {'name': '大冰', 'age': 19}或者我們可以直接給__init__方法設置一個默認參數(shù),然后直接實例就不會報錯了。
def __init__(self, name = '周星星', age = 12): self.name = name self.age = age stu = Student() # 不會報錯,正常實例
第二種定義方式如下:
class Student(object):
def __init__(self):
self.name = None
self.age = None
以第一種的區(qū)別,這種定義方式時,沒有形參的。但是它已經(jīng)指定name 和 age都是 None, 相當于這兩個參數(shù)已經(jīng)賦值,不過是None。
這種形式是可以直接實例對象,然后再給對象里的屬性賦值:
stu = Student() # 正常實例
"""查看stu對象的屬性是什么狀態(tài)"""
print(stu.__dict__) # 打印出:{'name': None, 'age': None}
然后再來重新給對象的屬性賦值:
stu.name = '陳冠希' stu.age = 16
以上就是__init__方法定義的一些區(qū)別。
那么為什么在class中 要定義__init__方法呢?因為他是一個初始化方法,沒有初始化的話,實例后的對象,用__dict__方法查看對象里面的屬性將是空的。
總結
到此這篇關于通過一文帶你弄懂Python3中的def __init__的文章就介紹到這了,更多相關Python3的def __init__內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python+matplotlib實現(xiàn)動態(tài)繪制圖片實例代碼(交互式繪圖)
這篇文章主要介紹了python+matplotlib實現(xiàn)動態(tài)繪制圖片實例代碼(交互式繪圖),小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
Python如何實現(xiàn)在字符串里嵌入雙引號或者單引號
今天小編就為大家分享一篇Python如何實現(xiàn)在字符串里嵌入雙引號或者單引號,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

