面向对象与组合

类与对象

面向对象的编程方式

class
定义函数: 方法 动态属性
定义变量: 类属性 静态属性
__init__方法 初始化方法
python帮我们创建了一个对象self
每当我们调用类的时候就会触发这个方法
# class Dog:
#     def __init__(self,name,hp,ad,sex):
#         self.name = name
#         self.hp = hp
#         self.ad = ad
#         self.sex = sex
#     def bite(self,person):
#         person.hp -= self.ad
#         print('%s被咬了,掉了%s的血'%(person.name,self.ad))
# class Person:
#     def __init__(self,name,hp,ad,sex):
#         self.name = name
#         self.hp = hp
#         self.ad = ad
#         self.sex = sex
#     def kick(self,dog):
#         dog.hp -= self.ad
#         print('%s被踢了,掉了%s的血'%(dog.name,self.ad))
# eg = Person('二狗',100,5,'nan')
# dh = Dog('大黄',100,10,'teddy')
# dh.bite(eg)
# eg.kick(dh)
# print(dh.hp)
# print(eg.hp)

 

# from math import  pi
# class Circle:                # 类,类里面可以定义方法方便使用
#     def __init__(self,r):
#         self.r = r
#     def area(self):          # 方法
#         return pi*self.r**2
#     def perm(self):         # 方法
#         return 2*pi*self.r
# c1 = Circle(4)
# print(c1.area())
# print(c1.perm())·

 

组合


# 对于不可变数据类型 类便最好用类名操作
# 对于可变数据类型 对象名的修改是共享的 重新赋值是独立的

#对象名调用方法 就发生了绑定
class Person:
    def __init__(self,name,hp,aggr,sex):
        self.name = name
        self.hp = hp
        self.aggr = aggr
        self.sex = sex
        self.money = 0
    def kick(self,dog):
        dog.hp -= self.aggr
    def get_weap(self,weap):
        if self.money>=weap.price:
            self.money -= weap.price
            self.aggr += weap.aggr
            self.weap = weap
        else:
            print('no money')

class Dog:
    def __init__(self,name,hp,aggr,kind):
        self.name = name
        self.hp = hp
        self.aggr = aggr
        self.kind = kind
    def bite(self,person):
        person.ho -= dog.aggr

class Weap:
    def __init__(self,name,aggr,nai,price):
        self.name = name
        self.aggr = aggr
        self.nai = nai
        self.price = price
    def R(self,aim):
        if self.nai>0:
            print('暴击')
            aim.hp -= self.aggr*2.5
            self.nai -= 1

ren = Person('二狗',100,5,'')
dh = Dog('大黄',1000,20,'teddy')
wu = Weap('斩黄剑',200,3,999)
ren.money += 1000
ren.get_weap(wu)
ren.kick(dh)
print(dh.hp)
ren.weap.R(dh)
print(dh.hp)
#  组合  :  一个对象的属性值是另一个类的对象

 

posted @ 2020-12-11 21:30  木_糖  阅读(75)  评论(0编辑  收藏  举报