網站首頁 編程語言 正文
前言
在學習python-100-days時,在面向對象編程基礎的那一塊,封裝一個class時,突然出現def __init__
的方法,剛開始時,對他的理解很模糊,為什么定義一個類需要用到def __init__
。
于是翻找了一些資料,大概就是兩種定義方式如下:
第一種定義方式如下:
class Student(object): # __init__是一個特殊方法用于在創建對象時進行初始化操作 # 通過這個方法我們可以為學生對象綁定name和age兩個屬性 def __init__(self, name, age): self.name = name self.age = age
上面這一種,是在學習python-100-days時,里面的一種定義方式。里面是包含兩個參數 name
和 age
。在實例的時候,必須要傳入這兩個參數的值進去。
stu = Student() # 報錯
如果上面直接實例它的話就會報錯:TypeError missing 2 required positional arguments: 'name' and 'age'
正常情況下,我們應該傳入參數:
stu = Student('大冰', 19) # 正常實例
然后我們可以利用__dict__
方法查看對象的屬性。
print(stu.__dict__) # 打印出: {'name': '大冰', 'age': 19}
或者我們可以直接給__init__
方法設置一個默認參數,然后直接實例就不會報錯了。
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
以第一種的區別,這種定義方式時,沒有形參的。但是它已經指定name
和 age
都是 None
, 相當于這兩個參數已經賦值,不過是None
。
這種形式是可以直接實例對象,然后再給對象里的屬性賦值:
stu = Student() # 正常實例 """查看stu對象的屬性是什么狀態""" print(stu.__dict__) # 打印出:{'name': None, 'age': None}
然后再來重新給對象的屬性賦值:
stu.name = '陳冠希' stu.age = 16
以上就是__init__
方法定義的一些區別。
那么為什么在class中 要定義__init__
方法呢?因為他是一個初始化方法,沒有初始化的話,實例后的對象,用__dict__
方法查看對象里面的屬性將是空的。
總結
原文鏈接:https://blog.csdn.net/qq_41308489/article/details/111701629
相關推薦
- 2022-06-02 Android?Spinner和GridView組件的使用示例_Android
- 2022-04-25 django數據庫遷移migration實現_python
- 2023-02-25 Golang合并yaml文件過程逐步講解_Golang
- 2022-09-30 QT實現多文件拖拽獲取路徑的方法_C 語言
- 2023-02-07 Pytorch中的廣播機制詳解(Broadcast)_python
- 2022-04-09 Linux(CentOS7)后臺運行程序關掉窗口不被殺掉
- 2022-08-17 Python?獲取今天任意時刻的時間戳的方法_python
- 2022-06-07 C語言非遞歸算法解決快速排序與歸并排序產生的棧溢出_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支