面向对象编程复习 思想:角色的抽象,创建类,创建角色(实例化),操作实例 面向对象的关键字 class class 类名: 静态属性 = 'aaa' def __init__(self):pass 类名.静态属性 #存储在类的命名空间里(当文件被加载,变量和类名,函数名就被加载在内存里,) 对象 = 类名() #实例化:创造一个self对象,执行init方法,返回self给外部对象 对象.静态属性 对象.方法 对象可也使用静态变量 类不可以使用对象里的属性 组合:必须是两个类 一个类的对象、是另外一个类的对象的属性 组合:一个对象的属性值,是另外一个类的对象 #nezha.weapon 是 Weapon的对象 案例:角色、怪物、武器、创建3个类、角色可以拥有武器的属性、weapon :武器
# -*- coding:utf-8 -*-
# 面向对象的三大特性:继承、多态、封装
#组合:一个对象的属性值,是另外一个类的对象
#nezha.weapon 是 Weapon的对象
class Dog:
def __init__(self,*args):
self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.kind = args[3]
def bite(self,person):
person.hp -= self.aggr
class Person:
def __init__(self,*args):
self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
self.money = args[4]
def attack(self,dog):
dog.hp -= self.aggr
def get_weapon(self,weapon):
if self.money >= weapon.price:
self.money -= weapon.price
self.weapon = weapon
self.aggr += weapon.aggr
else:
print('金币不足')
class Weapon:
def __init__(self,name,aggr,njd,price):
self.name = name
self.aggr = aggr
self.njd = njd
self.price = price
def hand18(self,person):
if self.njd > 0:
person.hp -= self.aggr*2
self.njd -= 1
else:
print("您的武器坏了")
gouzi = Dog('gouzi',999,200,'taidi')
nezha = Person('nezhan',1999,300,'女',0)
w = Weapon('打狗棒',200,3,998)
#nezha装备打狗棒
nezha.money += 1000
nezha.get_weapon(w)
print(nezha.weapon) #<__main__.Weapon object at 0x0000026174D06940>
print(nezha.aggr) #500 哪吒攻击本来300装备武器后变成500
nezha.attack(gouzi)
print(gouzi.hp) #499 血量→999-500
nezha.weapon.hand18(gouzi) #使用武器攻击gouzi 499-200*2
print(gouzi.hp) #99血量剩余 99
#---------------------------------------------------
D:\python\python.exe F:/运维笔记/python/面向对象/011类和对象组合.py
<__main__.Weapon object at 0x0000024CF3796908>
500
499
99
组合练习题
# -*- coding:utf-8 -*-
class Teacher:
def __init__(self,name,birthday,sex,cource):
self.name = name
self.birthday = birthday
self.sex = sex
self.cource = cource
class Cource:
def __init__(self,course_name,period,price):
self.course_name = course_name
self.period = period
self.price = price
class Birthday:
def __init__(self,year,month,day):
self.year = year
self.month = month
self.day = day
b = Birthday(2019,1,16)
c = Cource('python',6,800000)
zhang = Teacher('张老师',b,'男',c)
print(zhang.birthday.year) #可以通过zhang(对象)-(Teacher类)调用 Birthday里的属性
print(zhang.cource.price) #可以通过zhang(对象)-(Teacher类)调用 Cource里的属性
#-----------------------------------------------------------------------------------
D:\python\python.exe F:/运维笔记/python/面向对象/012类和对象的组合练习.py
2019
800000
组合练习题
# -*- coding:utf-8 -*-
#案例:求两个圆的的差集面积和周长之和
x = 8
class Circle:
def __init__(self,n):
self.n = n
def area(self):
return self.n*self.n
def perimeter(self):
return self.n*4
class Ring:
def __init__(self,out_n,int_n):
self.out_c = Circle(out_n)
self.int_c = Circle(int_n)
def area(self):
return self.out_c.area() - self.int_c.area()
def perimeter(self):
return self.out_c.perimeter() + self.int_c.perimeter()
ring = Ring(20,10)
print(ring.area())
print(ring.perimeter())
#----------------------------------------------------------------
D:\python\python.exe F:/运维笔记/python/面向对象/013类和对象的组合练习.py
300
120