一、面向對象編程
面向對象編程(英語:Objectoriented programming,縮寫:OOP)是一種編 程理念,這種編程理念更符合我們人的邏輯思維。使用面向對象編程可以提高我 們的開發速度和代碼的重用率。面向對象的開發非常適合大型程序開發,開發速 度和後期維護都比過程化開發要好很多。
二、面向對象和麪向過程理解 面向過程和麪向對象都是用來解決問題的,只是解決問題的思路不同。 面向過程可以理解親力親爲,面向對象可以理解爲坐享其成。
例如炒菜 面向過程: 1)菜市場買菜,2)討價還價,3)洗菜,4)切菜,5)炒菜,6)吃 面向對象: 1) 點開APP,2).下訂單 3).吃 面向過程: 在生活中就是親力親爲,在程序中面向過程編程就是函數之間的一個相互調用。 以函數爲基本結構使用。 面向對象在生活中是坐享其成,別人做好的東西爲我所用。在程序中面向對象編 程是以對象爲基本結構使用。 那什麼是對象呢?
三、對象和類的相關概念
1.類 生活中的類和對象概念 類:是對一羣具有相同特徵或者行爲的事物的統稱,是抽象的,不能直接使用。
例如人類狗類貓類… 描述一個類通過行爲和特徵 行爲:會跑,會叫
特徵:黃毛,大眼睛 類可以理解爲一種事物的模板
2.對象 對象: 是由類創造出來的具體實體,可以直接使用的。例如 大黃,小白。 區分類和對象:
3. 類和對象之間的關係
(1) 先有類後有對象
(2)類只有一個對象可以有多個
4.類的設計 在程序中設計一個類,通常需要滿足一下3個要素:
類名:大駝峯命名法。
屬性:描述這類事物的特徵。
方法:描述這類事物的具體行爲。
四、定義一個簡單的類(只包含方法)
class Student:
ID=0
name=""
address=""
def say(self):
print(self.ID,self.name,self.address)
zs=Student()
zs.ID=1003
zs.name="zs"
zs.address="西安"
zs.say()
結果:
1003 zs 西安
五、self 變量 self : 哪個對象調用方法或者屬性,self就是那個變量。 練習查看 self和 對象的內存id值是否相同。
class Person:
def study(self):
print("你們凌晨3點還在學習嗎")
print("study中的id--->",id(self))
#
# def grilfriend(self):
# print("熱戀中的人")
# print("戀愛的人的id",id(self))
def eat(self):
print("每天吃3噸")
print("eat中的id",id(self))
zht= Person()
# zht.grilfriend()
zht.study()
zht.eat()
結果:
你們凌晨3點還在學習嗎
study中的id---> 3024978813168
每天吃3噸
eat中的id 3024978813168
六、在類的外部增加屬性 方式: 對象名.屬性名=值
注意:這種方式雖然簡單,但是不推薦使用
七、init()方法 init()內置方法在創建對象的時候自動執行。 我們可以在 init()中做一些初始化操作。
練習1:創建Cat類,在 init()方法中初始化name屬性的值
class Student:
count=0
def __init__(self,name,age):
self.name=name
self.age=age
self.dog="小狗"
self.cat="小貓"
self.address="西安"
Student.count+=1
def say(self):
print(f"姓名{self.name},年齡{self.age}")
print(self.address)
zs=Student("zs",18)
zs.say()
print(zs.cat)
結果:
```python
姓名zs,年齡18
西安
小貓
八、str()方法 打印對象的名稱時默認調用的是str()方法,此方法默認返回的是對象的內存地址。
我們可以重寫 str() 方法打印對象保存的信息。
class Student:
def __init__(self,name):
self.name=name
def __str__(self):
return f"姓名是{self.name}"
zs=Student("zs")
print(str("zs"))
結果:
zs
['hh', 'b']
['hh', 'b']
['hh', 'b']
['hh', 'b']
['zs', 'ls']
['hh', 'b']
張三 -10