day22_面向对象
面向過程:
優點是:極大的降低了寫程序的復雜度,只需要順著要執行的步驟,堆疊代碼即可。
缺點是:一套流水線或者流程就是用來解決一個問題,代碼牽一發而動全身。
面向對象:
優點是:解決了程序的擴展性。對某一個對象單獨修改,會立刻反映到整個體系中,如對游戲中一個人物參數的特征和技能修改都很容易。
缺點:可控性差,無法向面向過程的程序設計流水線式的可以很精準的預測問題的處理流程與結果,面向對象的程序一旦開始就由對象之間的交互解決問題,即便是上帝也無法預測最終結果。于是我們經常看到一個游戲人某一參數的修改極有可能導致陰霸的技能出現,一刀砍死3個人,這個游戲就失去平衡。
# 定義類
# init方法------實例化:類名加括號就是實例化,會自動觸發__init__函數的運行,可以用它來為每個實例定制自己的特征
# self是什么 self擁有屬性都屬于對象
# 類中可以定義靜態屬性
# 類中可以定義方法,方法都有一個必須傳的參數self
# 實例化
# 實例、對象
# 對象查看屬性
# 對象調用方法
class Person: # 類名,大駝峰country = "china" # 創造了一個只要是這個類就一定有的屬性(靜態屬性)def __init__(self,*args): # 初始化方法,self是對象,是一個必須傳的參數# self就是一個可以存儲很多屬性的大字典self.name = args[0] # 往字典里添加屬性的方式發生了一些變化self.age = args[1]self.hp = args[2]self.att = args[3]self.sex = args[4]def walk(self,n): # 方法,一般情況下必須傳self參數,且必須寫在第一個# 后面還可以傳其他參數,是自由的print("%s行走了%d步"%(self.name,n))alex = Person("王二",27,100,10,"男") alex.walk(12) print(Person.country) print(alex.name) print(alex.__dict__) # 查看所有屬性
-----------------------------------------------------------------------
#人狗大戰
class Dog:
def __init__(self,name,ph,att):
self.name = name
self.ph = ph
self.att = att
def bite(self,people):
people.ph -= self.att
print("%s咬了%s,%s剩余血量%d"%(self.name,people.name,people.name,people.ph))
class People:
def __init__(self,name,ph,att):
self.name = name
self.ph = ph
self.att = att
def attack(self,dog):
dog.ph -= self.att
print("%s打了%s,%s剩余血量%d" % (self.name, dog.name, dog.name, dog.ph))
jin = Dog('金老板',100,20,) # 實例化
alex = People('alex',999,998)
jin.bite(alex)
print(alex.ph)
? ?
# 定義類
# class
# 函數 : 方法 動態屬性 # 類中可以定義方法,方法都有一個必須傳的參數self
# 變量 : 類屬性 靜態屬性 # 類中可以定義靜態屬性
# __init__方法 初始化方法
# python幫我們創建了一個對象self
# 每當我們調用類的時候就會自動觸發這個方法。默認傳self
# 在init方法里面可以對self進行賦值
# self是什么 self擁有屬性都屬于對象
#在類的內部,self就是一個對象
# alex = Person()
# alex.walk == Person.walk(alex)
# 實例化
# 對象 = 類(參數是init方法的)
# 實例、對象 完全沒有區別
# 對象查看屬性
# 對象.屬性名
# 對象調用方法
# 對象.方法名(參數) #類名.方法名(對象名,參數)
轉載于:https://www.cnblogs.com/wzc27229/p/11134289.html
總結
以上是生活随笔為你收集整理的day22_面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mariadb(第二章)增删改 Mari
- 下一篇: Day 33 并发编程3