類:
語法: class關鍵字 類名
# 類名規范 大寫開頭 駝峰命名法
class SHOldboyStudent:
# 描述該類對象的特征
school = "上海Oldboy"
name = "矮根"
age = 68
gender = "unknown"
# 在定義階段
# 只要包含該類的py被執行 就會做兩件事情
# 1.就會創建類的名稱空間
# 2.執行代碼 將產生的名稱放入名稱空間
print("========================")
# 描述該類對象的行為 通過函數
def say_hi(abc):
print(abc)
print("hello oldBoy")
#使用類中的屬性
print(SHOldboyStudent.__dict__)
print(SHOldboyStudent.__dict__["name"])
print(SHOldboyStudent.name)
# 使用類中的函數
print(SHOldboyStudent.__dict__["say_hi"])
print(SHOldboyStudent.say_hi)
# 使用類直接調用類中函數時 與普通函數沒有任何區別 位self僅僅是一個置參數
SHOldboyStudent.say_hi(10)
對象的使用
class OldboyStudent:
# 如果每個對象的這個屬性都相同 才應該定義到類中 比如所有人的學校都是上海Oldboy
school = "上海Oldboy"
# 創建對象
# 語法: 在類名后加括號 與調用函數寫法相同
# stu = OldboyStudent()
# # 訪問對象的屬性
# print(stu.school)
# print(OldboyStudent.school)
# 修改屬性的值
# stu.school = "北京Oldboy"
# print(stu.school)
#
# # 增加屬性
# stu.room_num = "1008"
# print(stu.room_num)
#
# # 刪除屬性
# del stu.room_num
# print(stu.room_num)
# 對象 與類的名稱空間是獨立的
# stu.school = "深圳oldboy" # 為對象的屬性賦予新的值
# print(OldboyStudent.school) # 類中的屬性不會變化
# stu.room_num = "1008" # 為對象增加屬性
# # print(OldboyStudent.room_num) #類中也不會出現新的屬性
# print(stu.__dict__)
# print(OldboyStudent.__dict__)
# 如果對象的屬性是相同的 就放到類中 作為一個公共的數據
# stu.school #大家都是上海小區
# stu2 = OldboyStudent()
# print(stu2.__dict__)
init函數:
# __init__稱之為初始化函數 它會在創建對象的時候自動執行
# 創建對象時
# 1.創建一個空對象
# 2.執行__init__函數 并且自動傳入了這個對象
# 該函數的作用,就是為對象的屬性賦初始值
#1. 使用場景 需要為每個對象定制不同的屬性值
#2.__init__在創建對象后自動執行
#3.第一個self參數 指的是這個對象本身 不需要手動傳值
1.所有程序都因該使用面向對象來設計嗎?為什么?
不是所有程序都應該使用面向對象,應該面向對象會提高程序的復雜度,對于一些擴展要求不高的程序,則不一定非要使用面向對象
2.什么是對象 什么是類
對象指的是現實生活中實實在在存在的物體,并且其具備獨特的特征與行為 反過來可以理解為 特征與行為的結合體
類是一些具備相同特征和技能的事物的抽象概念,不實際存在
3.在面向過程編程中我們思考解決方案時,是分析完成任務時需要哪些步驟,按照什么樣的順序來編寫,而在面向對象編程中我們從操作者轉變為指揮者 首先思考的是什么?
首先思考,完成任務需要哪些對象來參與
其次分析這些對象具備哪些特征和行為
最后按照分析結果編寫class
4.一個類中通常包含變量和函數,它們分別用于描述什么?
變量用于描述該類對象共同的屬性
函數用于描述該類對象具備的行為(技能)
5.類在定義階段發生了什么
立即執行類中的代碼 將產生的名字存放在類的名稱空間中
6.創建對象時發生了什么
1.創建空對象
2.自動執行init函數 將這個對象以及額外的參數組裝后傳給該函數
7.什么是綁定方法,和普通函數有什么區別
綁定方法其實就是對象和函數得綁定在一起
在調用綁定方法時,會自動傳入對象本身
最終執行的還是類中定義的函數
綁定方法僅僅是幫我們自動傳入了對象
區別:
普通函數在調用時,根據函數聲明有幾個參數就一定要傳幾個參數
而綁定函數在調用時,會自動傳入對象本身,所以通常我們手寫的參數個數比聲明的少一個
?