1.
面向過程 面向對象(oop:object oriented programming)
面向過程:---側重於怎麼作?
1.把完成某一個需求的 全部步驟 從頭至尾 逐步實現
2.根據開發要求,將某些功能獨立的代碼封裝成一個又一個函數
3.最後完成的代碼,就是順序的調用不一樣的函數
特色:
1.注重步驟和過程,不注重職責分工
2.若是需求複雜,代碼變得很是複雜
3.開發複雜的項目的時候,沒有固定的套路,開發難度很大python
面向對象:----側重於誰來作?
相比較函數,面向對象是更大的封裝,根據職責在一個對象中封裝多個方法
1.在完成某一個需求前,首先肯定職責--要作的事(方法)
2.根據職責肯定不一樣的對象,在對象內部封裝不一樣的方法(多個)
3.最後完成代碼,就是順序的讓不一樣的對象調用不一樣的方法
特色:
1.注重對象和職責,不一樣的對象承擔不一樣的職責
2.更加適合對複雜的需求變化,是專門應對複雜項目的開發,提供固定的套路
3.須要在面向過程的基礎上,再學習一些面向對象的語法程序員
面向對象有兩個核心的概念
類:是一類具備相同特徵或行爲的事物的一個統稱
對象:由類建立出來的一個具體的存在
類和對象的關係:先有類再有對象
類是模板 對象是根據這個模板建立出來的
類只須要有一個 對象能夠有多個app
類:屬性(這一類事務的共同信息) 和 方法(你能完成的動做)
1.類名:這類事物的名字(大駝峯命名法)
大駝峯命名法:
1.每一個單詞的首字母大寫
2.單詞與單詞之間沒有下劃線
2.屬性:這個類建立出來的對象有什麼特徵
3.方法:這個類建立出來的對象有什麼行爲
"""
"""
類名的肯定
名詞提煉法分析整個業務流程,出現的名詞,一般就是找到的類ide
示例:
小明今年18歲 身高1.80 天天早上要跑步,會去吃東西
小張今年17歲 身高1.85 小張不跑步 小張喜歡吃東西
類名:
Person
屬性:
name
height
age
方法:
run()
eat()
""" 函數
#定義一個貓類
class Cat:
def eat(self):
print('%s 愛吃魚' %(self.name))
def drink(self):
print('小貓要喝水')oop
#建立貓對象
#print(Cat())
tom = Cat()
tom.name = 'Tom'
print(tom.name)
print(tom)
tom.drink()
tom.eat()學習
fentiao = Cat()
print(fentiao)
fentiao.eat()code
self:
哪個對象調用的方法,self就是哪個對象的引用
在封裝的方法內部,self就表示當前調用方法對象本身
在調用方法的時候,程序員不須要傳遞self參賽(定義的時候,第一個參數必須是self)對象
初始化方法:
類名() 就能夠建立一個對象
類名() 建立對象的時候,python解釋器會自動執行如下操做
1.爲對象在內存中分配空間--建立對象
2.調用初始化方法爲對象的屬性設置初始值
這個初始化方法是內置方法,是專門用來定義一個類據有哪些屬性和方法的隊列
class Cat: def __init__(self, new_name): # print('這是一個初始化方法') self.name = new_name def eat(self): print('%s愛吃魚' % (self.name)) def drink(self): print('%s要喝水' % (self.name))
hello_kitty = Cat('hello_kitty')
print(hello_kitty)
hello_kitty.eat()
hello_kitty.drink()
tom = Cat('藍貓')
tom.drink()
tom.eat()
若是但願在建立對象的同時,就設置對象的屬性,能夠對init方法進行改造
1.把但願設置的屬性值,定義成init方法的參數
2.在方法內部使用self.屬性名 = 形參 接收外部傳遞的參數
3.在建立對象的時候,使用類名(屬性)調用
str:在python中 使用print輸出對象變量時候,默認狀況下
會輸出這個變量引用的對象是由哪個類建立的對象以及在內存中的地址
若是在開發中,但願使用print輸出變量的時候,可以打印自定義內容
就能夠利用str這個內置的方法了
class Cat:
def init(self,name):
self.name = name
#def str(self):
#返回必須是一個字符串
#return '我是 %s' %(self.name)
tom = Cat('tom')
print(tom)
addr = id(tom)
print(addr)
print('%x' %(addr))
print('%d' %(addr))
fentiao = Cat('粉條')
print(fentiao)
del:若是但願在對象被銷燬以前,再作一些事情,能夠考慮一下del
當一個對象被從內存中銷燬前(把這個對象從內存中刪除掉),
會自動調用 del方法
class Cat:
def init(self,name):
self.name = name
print('%s 來了' %(self.name))
def del(self):
print('%s 走了' %(self.name))
tom = Cat('tom')
print(tom.name)
del tom
print('' 50)
print(tom.name)
練習:
棧:先進後出 入棧(push) 出棧(pop) 取棧頂元素 判斷棧是否爲空 顯示棧元素 列表
隊列:先進先出
class Stack:
def init(self):
self.stack = []
def push(self,value): """ :param value:入棧元素 :return: """ self.stack.append(value) return True def pop(self): # 判斷棧是否爲空 if self.stack: # 獲取出棧元素 並返回 item = self.stack.pop() return item else: return False def top(self): if self.stack: return self.stack[-1] else: return False def length(self): return len(self.stack) def view(self): return ','.join(self.stack)
s = Stack()s.push('1')s.push('2')s.push('3')item = s.pop()print(s.view())