python学习 day19
生活随笔
收集整理的這篇文章主要介紹了
python学习 day19
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、類的名稱空間以及對象名稱空間
創建一個類就會創建一個類的名稱空間,用來存儲類中定義的所有名字,這些名字稱為類的屬性
類的兩種屬性:靜態屬性和動態屬性
- 靜態屬性就是直接在類中定義的變量(字段)
- 動態屬性就是定義在類中的方法
創建一個對象/實例就會創建一個對象/實例的名稱空間,存放對象/實例的名字,稱為對象/實例的屬性
class Gamerole(object):name = 'LOL'year = 2012def __init__(self,name,ad,hp):self.name = nameself.ad = adself.hp = hpdef attack(self,p1):# Gamerole.area = '德瑪西亞'p1.hp -= self.adprint('%s攻擊%s,%s掉了%s血,還剩%s血' % (self.name, p1.name, p1.name, self.ad, p1.hp)) gailun = Gamerole('草叢倫',10,200) # 實例化一個對象 gailun.armor = 90 # {'name': '草叢倫', 'ad': 10, 'hp': 200, 'armor': 90} print(gailun.__dict__) # 對象的屬性:不僅在__init__里面添加,還可以在其他方法或者類外面添加。 yasuo = Gamerole('托兒所', 20, 50) yasuo.attack(gailun) # 托兒所攻擊草叢倫,草叢倫掉了20血,還剩180血# 類的屬性:不僅在類內部可以添加,還可以在類外部添加。 gailun = Gamerole('草叢倫', 10, 200) timo = Gamerole('提莫', 30, 60) print(gailun.name) # 草叢倫 # 對象空間中存在一個類對象指針,所以對象可以找到類中的變量以及方法
print(gailun.year)
# 類名只能找到類中的變量,方法,或者(父類中的),不能找對象中的屬性。
二、組合
# 計算一個類被多少人執行過。
count = 0 class A:def __init__(self):global countcount += 1class B:count = 0def __init__(self):B.count += 1 obj = B() print(obj.count) obj = B() print(obj.count) obj = B() obj = B() obj = B() obj = B() print(B.count)# 組合: 將一個對象封裝到另一個對象的屬性中
例子: class Gamerole:def __init__(self, name, ad, hp):self.name = nameself.ad = adself.hp = hpdef attack(self, p1):p1.hp -= self.adprint("%s攻擊%s,%s掉了%s血,還剩%s血" % (self.name, p1.name, p1.name, self.ad, p1.hp))def equip_weapon(self, wea):self.wea = wea # 組合:給一個對象封裝另一個對象的屬性class Weapon:def __init__(self, name, ad):self.name = nameself.ad = addef weapon_attack(self, p1, p2):p2.hp = p2.hp - self.ad - p1.adprint("%s 利用 %s 攻擊了 %s,%s 還剩 %s 血" % (p1.name, self.name, p2.name, p2.name, p2.hp))barry = Gamerole('太白', 10, 200) panky = Gamerole('金蓮', 20, 50) pillow = Weapon('繡花枕頭', 2) # pillow.weapon_attack(barry, panky) barry.equip_weapon(pillow) barry.wea.weapon_attack(barry, panky)組合的好處 1,代碼更好。 2,類與類之間的耦合性增強。
三、面向對象的三大特征:繼承
class Animal:type_name = "動物類"def __init__(self, name, sex, age):self.name = nameself.sex = sexself.age = agedef eat(self):print(self)print('吃東西')class Person(Animal):type_name = "人類" # 自己有就不要向父級拿pass class Cat(Animal):passclass Dog(Animal):passprint(Person.type_name) # 人類 Animal 叫父類,基類。Person、Cat、Dog : 子類,派生類
繼承:單繼承,多繼承
python 類:
經典類:只存在python2x,不繼承object的類,所以python2x既有經典類,又有新式類
新式類:繼承object類。python3x所有類默認都繼承object。
經典類:深度優先。
新式類:mro 繼承順序,c3 算法。
# 既要執行父類方法,又要執行子類方法
class Animal:type_name = "動物類"def __init__(self, name, sex, age):self.name = nameself.sex = sexself.age = agedef eat(self):print(self)print('吃東西')class Person(Animal):def __init__(self, name, sex, age, mind):Animal.__init__(self, name, sex, age) # 方法一super().__init__(name, sex, age) # 方法二self.mind = mind# type_name = "人類"pass class Cat(Animal):def __init__(self, name, sex, age, climb):Animal.__init__(self, name, sex, age)self.climb = climbpassclass Dog(Animal):def __init__(self, name, sex, age, shit):Animal.__init__(self, name, sex, age)self.shit = shitpass方法一 : Animal.__init__ p1 = Person('春哥', "男", 20, '有思想') print(p1.__dict__) p2 = Cat('小花', '女', 5, '能爬樹') print(p2.__dict__) p3 = Cat('大黃', '男', 8, '會吃肉') print(p3.__dict__) # 方法一: Aniaml.__init__(self,name,sex,age) # p1 = Person('春哥','laddboy',18,'有思想') # print(p1.__dict__)# 方法二:super # p1 = Person('春哥','laddboy',18,'有思想') # print(p1.__dict__) # def func(self): # pass # self = 3 # func(self)# p1 = Person('春哥','laddboy',18,'有思想')
# p1.eat() 繼承 的特點:
1,類與類之間的耦合性增強。
2,節省代碼。
3,代碼更加規范化,合理性。 練習:
Day19天作業及默寫
1,暴力摩托程序(完成下列需求):
1.1
創建三個游戲人物,分別是:
①蒼井井,女,18,攻擊力ad為20,血量200
②東尼木木,男,20,攻擊力ad為30,血量150
③波多多,女,19,攻擊力ad為50,血量80
1.2
創建三個游戲武器,分別是:
①平底鍋,ad為20
②斧子,ad為50
③雙節棍,ad為65
1.3
創建三個游戲摩托車,分別是:
①小踏板,速度60邁
②雅馬哈,速度80邁
③寶馬,速度120邁。 class Game_role:def __init__(self,name,sex,age,ad,hp):self.name = nameself.sex = sexself.age = ageself.ad = adself.hp = hpdef equit_Moto(self, mo):self.mo = modef equit_weapon(self, wea):self.we = weadef attack(self, p1):p1.hp = p1.hp - self.adprint('%s赤手空拳打了%s%s滴血,%s還剩%s血。' % (self.name, p1.name, self.ad, p1.name, p1.hp))class Weapon:def __init__(self, name, ad):self.name = nameself.ad = addef attack_wea(self, p1, p2):p2.hp = p2.hp - p1.ad - self.adprint('%s利用%s打了%s一%s,%s還剩%s血。' %(p1.name, self.name, p2.name, self.name, p2.name, p2.hp))def mixed_attack(self,p1,p2):p2.hp = p2.hp - p1.ad - self.adprint('%s騎著%s打了騎著%s的%s一%s,%s哭了,還剩%s血。'% (p1.name, p1.mo.name, p2.mo.name, p2.name, self.name, p2.name, p2.hp))class Moto:def __init__(self,name,speed):self.name = nameself.speed = speeddef run(self,p1):print('%s騎著%s開著%s邁的車行駛在賽道上' %(p1.name,self.name,self.speed))cang = Game_role('蒼井井','女',18,20,200) dongni = Game_role('東尼木木', '男', 20, 30, 150) boduo = Game_role('波多多', '女', 19, 50, 80)pan = Weapon('平底鍋', 20) axe = Weapon('斧子', 50) nunchakus = Weapon('雙節棍', 20)pedal = Moto('小踏板', 60) yamaha = Moto('雅馬哈', 80) bmw = Moto('寶馬', 120) View Code 完成下列需求(利用武器打人掉的血量為武器的ad + 人的ad):
(1)蒼井井騎著小踏板開著60邁的車行駛在賽道上。
(2)東尼木木騎著寶馬開著120邁的車行駛在賽道上。
(3)波多多騎著雅馬哈開著80邁的車行駛在賽道上。
(4)蒼井井赤手空拳打了波多多20滴血,波多多還剩xx血。
(5)東尼木木赤手空拳打了波多多30滴血,波多多還剩xx血。
(6)波多多利用平底鍋打了蒼井井一平底鍋,蒼井井還剩xx血。
(7)波多多利用斧子打了東尼木木一斧子,東尼木木還剩xx血。
(8)蒼井井騎著寶馬打了騎著小踏板的東尼木木一雙節棍,東尼木木哭了,還剩xx血。(選做) cang.equit_Moto(bmw) cang.equit_weapon(nunchakus) dongni.equit_Moto(pedal) View Code (9)波多多騎著小踏板打了騎著雅馬哈的東尼木木一斧子,東尼木木哭了,還剩xx血。(選做)
2,
a, 定義一個父類Animal,在構造方法中封裝三個屬性,姓名,性別,年齡,再給其添加一個eat的方法,方法中顯示 % s正在吃飯( % s是哪個對象調用此方法,顯示哪個對象名字)。
b, 定義兩個基類Person, Dog,全部繼承這個父類Animal.
c, Person類中,有構造方法,封裝一個皮膚的屬性,有eat方法,方法中顯示人類正在吃飯。
d, Dog類中,有構造方法,封裝一個毛色的屬性,有eat方法,方法中顯示狗狗正在吃飯。 class Animal(object):def __init__(self, name, sex, age):self.name = nameself.sex = sexself.age = agedef eat(self):print("%s正在吃飯, 吃完飯喂狗" % self.name)class Person(Animal):def __init__(self, skin, name, sex, age):self.skin = skinsuper().__init__(name, sex, age)# def eat(self):# print("人類正在吃飯")class Dog(Animal):def __init__(self, coat, name, sex, age):self.coat = coatsuper().__init__(name, sex, age)def eat(self):super().eat()print("狗狗正在吃飯") View Code 上面這幾個類創建完成之后,完成下列要求:
①: 實例化一個人類的對象,讓其只封裝皮膚屬性。
②: 實例化一個人類的對象,讓其封裝姓名,性別,年齡,皮膚四個屬性。
③: 實例化一個狗類的對象,讓其只封裝毛色屬性。 obj_dog = Dog("黑白相間") print(obj_dog.__dict__) View Code ④: 實例化一個狗類的對象,讓其封裝姓名,性別,年齡,毛色四個屬性。 obj_dog1 = Dog("黑白相間", "二哈", "公", 2) print(obj_dog1.__dict__) View Code ⑤: 實例化一個人類的對象,讓其只執行父類的eat方法(可以對人類代碼進行修改)。
⑥: 實例化一個狗類的對象,讓其既執行父類的eat方法,又執行子類的eat方法。 obj_dog1 = Dog("黑白相間", "大黃", "母", 3) obj_dog1.eat() View Code 3,定義一個類,計算圓的周長和面積。 from math import piclass Circle:def __init__(self, r):self.r = rdef perimeter(self):return 2 * pi * self.rdef area(self):return pi * (self.r ** 2)obj_circle = Circle(18) print(obj_circle.perimeter()) print(obj_circle.area()) View Code 4,定義一個圓環類,計算圓環的周長和面積(升級題)。 class Ring:def __init__(self, b_r, s_r):self.b_r = b_rself.s_r = s_rdef perimeter(self):return 2 * pi * self.b_r + 2 * pi * self.s_r # 大圓的周長 + 小圓的周長# return 2 * pi * (self.b_r + self.s_r)def area(self):return pi * self.b_r ** 2 - pi * self.s_r ** 2 # 大圓面積 - 小圓面積 obj_ring = Ring(30, 18) print(obj_ring.perimeter()) print(obj_ring.area()) View Code ?
轉載于:https://www.cnblogs.com/zhongmin/p/10272840.html
總結
以上是生活随笔為你收集整理的python学习 day19的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jmeter使用入门
- 下一篇: 2019/1/14,15 Python