dict
d = {'k':'v'}
list
[1,2]
print(dict) 類
print(d) 對象
自訂義類
def 函數名():
pass
class 類名:
屬性 = 'a'
print(類名.屬性)
類名的作用 就是操作屬性 查看屬性
class Person: #類名 country = 'China' #創造了一個只要是這個類就一定有的屬性 #類屬性 靜態屬性 def __init__(self,*args): #初始化方法,self是對象,是一個必須傳的參數 #self 就是一個可以儲存很多屬性的大字典 self.name = args[0] #往字典裡添加屬性的方式發生了一些變化 self.hp = args[1] self.aggr = args[2] self.sex = args[3] def walk(self,n): #方法,一般情況下必須傳self參數,且必須寫在第一個 #後面還可以傳其他參數,是自由的 print('%s走走走,走了%s步'%(self.name,n)) print(Person.country) #類名 可以查看類中的屬性,不需要實例化就可以查看alex = Person('狗盛兒',100,1,'不詳') #類名還可以實例化對象,alex 對象 #實例化print(alex.__dict__) #查看所有屬性print(alex.name) #查看屬性值print(alex.hp) #查看屬性值alex.walk(5) #Person.walk(alex,5) #調用方法 類名.方法名(對象名) print(Person.__dict__['country']) Person.__dict__['country'] = '印度'print(alex.__dict__['name']) alex.__dict__['name'] = '大哥'print(alex.__dict__) print(alex.name) print(alex.name) alex.name = '大哥'alex.__dict__['name'] = '大哥'alex.age = 83print(alex.__dict__) print(alex.name)
對象 = 類名( )
過程:
類名( ) 首先會創造出一個對象,創建了一個self變量
調用init方法,類名跨號裡的參數會被這裡接收
執行init方法
返回self
對象能做的事:
查看屬性
調用方法
__ditc__對於對象的增刪改查操作都可以通過字典的語法進行
類名能做的事:
實例化
調用方法: 只不過要自己傳遞self 參數
調用類型的屬性,也就是調用靜態屬性
__dict__對於類中的名子只能看 不能操作
#面向對向的引入
#人狗大戰def Dog(name,blood,aggr,kind): dog = { 'name':name, 'blood': blood, #血量 'aggr': aggr, #攻擊力 'kind': kind } def bite(person): person['blood'] -= dog['aggr'] print('%s被咬了,掉了%s的血'%(person['name'],dog['aggr'])) dog['bite'] = bite return dog def person(name,blood,aggr,sex): person={ 'name': name, 'blood': blood, # 血量 'aggr': aggr, # 攻擊力 'sex': sex } def attack(dog): dog['blood'] -=person ['aggr'] print('%s被打了,掉了%s的血'%(dog['name'],person['aggr'])) person['attack'] = attack return person #代碼精簡了 方便增加人物 方便修改 人物更加規範 - 人模子 jin = Dog('金老闆',1000,100,'teddy') alex = person('狗剩兒',100,1,'不詳') nezha = person('哪吒',200,2,'不詳') print(jin) jin['bite'] (alex) alex['attack'](jin) #Dog函數和person函數 都是定義了一類事物#直到調用了函數,賦直了之後才真的有了一個實實在在的人或狗 #面向對向編成#所謂模子 就是 類抽象的 我能知道有甚麼屬性
#有甚麼技能 但不能知道屬性具體的值#jin alex nezha 舊式對象 有具體的值,屬性和技能都是根據類規範的執行結果:
{'name': '金老闆', 'blood': 1000, 'aggr': 100, 'kind': 'teddy', 'bite': <function Dog.<locals>.bite at 0x010EB8E8>}
狗剩兒被咬了,掉了100的血
金老闆被打了,掉了1的血
#面想對象的交互
class Dog: def __init__(self,name,blood,aggr,kind): self.name = name self.hp = blood self.aggr = aggr self.kind = kind def bite(self,person): #狗咬人,人掉血 person.blood -= self.aggr class Person : def __init__(self,name,blood,aggr,sex): self.name = name self.blood = blood self.aggr = aggr self.sex = sex def attack(self,dog): dog.hp -= self.aggr if dog.hp <= 0 : print('%s打了%s,%s被打死了,撲接~~~'%(self.name,
dog.name,dog.name)) else: print('%s打了%s,掉了%s血'%(self.name,dog.name,
self.aggr)) jin = Dog('金老闆',100,20,'teddy') alex = Person('alex',999,998,'不詳') jin.bite(alex) print(alex.blood) alex.attack(jin) print(jin.hp)
執行結果:
979
alex打了金老闆,金老闆被打死了,撲接~~~
-898
#練習
練習一 : 顯示如下的訊息
小明,10歲,男,上山去砍柴
小明,10歲,男,開車去樂園
小明,10歲,男,最愛喝可樂
老李,90歲,男,上山去砍柴
老李,90歲,男,開車去樂園
老李,90歲,男,最愛喝可樂
老張.........
例:
def shangshan(): print('%s,%s歲,%s,上山去砍柴') def drive(): print('%s,%s歲,%s,開車去樂園') def favor(): print('%s,%s歲,%s,最愛喝可樂') shangshan('小明','10','男') drive('小明','10','男') favor('小明','10','男')
#非常明顯的處理一類事物,這些事物都具有相似的屬性和功能#當有幾個函數 需要反反復復傳入相同的參數的時候,就可以考慮面向對象#這些參數都是對象的屬性 class Person: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def shangshan(self): print('%s,%s歲,%s,上山去砍柴'%(self.name,self.age,self.sex)) def drive(self): print('%s,%s歲,%s,開車去樂園'%(self.name,self.age,self.sex)) def favor(self): print('%s,%s歲,%s,最愛喝可樂'%(self.name,self.age,self.sex)) ming = Person('小明','10','男') ming.shangshan() ming.drive() ming.favor() zhang = Person('老張','90','男') zhang.shangshan() zhang.drive() zhang.favor()
執行結果:
小明,10歲,男,上山去砍柴
小明,10歲,男,開車去樂園
小明,10歲,男,最愛喝可樂
老張,90歲,男,上山去砍柴
老張,90歲,男,開車去樂園
老張,90歲,男,最愛喝可樂
練習二 : 求結果
circle 屬性 半徑,兩個方法:求周長和面積
#2pir pir**2from math import pi class Circle: def __init__(self,r): self.r = r def area(self): return pi*(self.r**2) def perimeter(self): return 2*pi*self.r c1 = Circle(6) print(c1.area()) print(c1.perimeter())執行結果:
113.09733552923255
37.69911184307752
定義類
init方法
self是甚麼 self擁有屬性都屬於對象
類中可以定義靜態屬性
類中可以定義方法,方法都有一個必須傳的參數self
實例化
實例、對象
對象查看屬性
對象調用方法
正方形 周長和面積
沒有留言:
張貼留言