面向对象第一天

面向对象第一天

# 游戏公司
    # 人狗大战
# 人 :
    # 名字 性别 职业 等级 血条 武器 攻击力
    # 技能 : 搓澡
# 狗 :
    # 名字 品种 血条 攻击力
    # 技能 : 舔

# alex = {
#     'name': 'alex',
#     'sex': '不详',
#     'job': '搓澡工',
#     'level': 0,
#     'hp' : 250,
#     'weapon':'搓澡巾',
#     'ad' : 1
# }
小白 = {
    'name':'小白',
    'kind':'泰迪',
    'hp':5000,
    'ad':249
}

# 1.你怎么保证所有的玩家初始化的时候都拥有相同的属性
# 2.每来一个新的玩家,我们都自己手动的创建一个字典,然后向字典中填值
# 3.人物和狗的技能如何去写

def Person(name,sex,job,hp,weapon,ad,level=0):   # 人模子
    def 搓(dog):
        dog['hp'] -= dic['ad']
        print('%s 攻击了 %s,%s掉了%s点血' % (dic['name'], dog['name'], dog['name'], dic['ad']))
    dic = {
    'name': name,
    'sex': sex,
    'job': job,
    'level': level,
    'hp' :hp,
    'weapon':weapon,
    'ad' : ad,
    'action':搓
    }
    return dic


def Dog(name,kind,hp,ad):
    def 舔(person):  # 函数不是一个公用的函数 是一个有归属感的函数
        person['hp'] -= dic['ad']
        print('%s 舔了 %s,%s掉了%s点血' % (dic['name'], person['name'], person['name'], dic['ad']))
    dic = {
    'name': name,
    'kind': kind,
    'hp': hp,
    'ad': ad,
    'action':舔
    }
    return dic

alex = Person('alex','不详','搓澡工',250,'搓澡巾',1)
wusir = Person('wusir','male','法师',500,'打狗棍',1000)
小白 = Dog('小白','泰迪',5000,249)
小金 = Dog('小金','柯基',10000,499)

小白['action'](alex)
alex['action'](小白)

# 面向过程 : 想要一个结果 写代码 实现计算结果
# 面向对象开发 : 有哪些角色 角色的属性和技能 两个角色之间是如何交互的

# 复杂的 拥有开放式结局的程序 比较适合使用面向对象开发
    # 游戏
    # 购物
# 先来定义模子,用来描述一类事物
# 具有相同的属性和动作
# class Person:       # 类名
#     def __init__(self,name,sex,job,hp,weapon,ad):
#         # 必须叫__init__这个名字,不能改变的,所有的在一个具体的人物出现之后拥有的属性
#         self.name = name
#         self.sex = sex
#         self.job = job
#         self.level = 0
#         self.hp = hp
#         self.weapon = weapon
#         self.ad = ad
# #
# alex = Person('alex','不详','搓澡工',260,'搓澡巾',1)     # alex 就是对象  alex = Person()的过程 是通过类获取一个对象的过程 - 实例化
# print(alex,alex.__dict__)
# wusir = Person('wusir','male','法师',500,'打狗棍',1000)
# # print(wusir,wusir.__dict__)
# print(alex.name)   # print(alex.__dict__['name'])  属性的查看
# alex.name = 'alexsb'    # 属性的修改
# print(alex.name)
# alex.money = 1000000     # 属性的增加
# print(alex.money)
# print(alex.__dict__)
# del alex.money           # 属性的删除
# print(alex.__dict__)
# 类名() 会自动调用类中的__init__方法

# 类和对象之间的关系?
    # 类 是一个大范围 是一个模子 它约束了事物有哪些属性 但是不能约束具体的值
    # 对象 是一个具体的内容 是模子的产物 它遵循了类的约束 同时给属性赋上具体的值

# Person是一个类 :alex wusir都是这个类的对象
# 类有一个空间,存储的是定义在class中的所有名字
# 每一个对象又拥有自己的空间,通过对象名.__dict__就可以查看这个对象的属性和值


# d = {'k':'v'}
# print(d,id(d))
# d['k'] = 'vvvv'
# print(d,id(d))

# 修改列表\字典中的某个值,或者是对象的某一个属性 都不会影响这个对象\字典\列表所在的内存空间


# class Person:       # 类名
#     def __init__(self,n,s,j,h,w,a):
#         # 必须叫__init__这个名字,不能改变的,所有的在一个具体的人物出现之后拥有的属性
#         self.name = n
#         self.sex = s
#         self.job = j
#         self.level = 0
#         self.hp = h
#         self.weapon = w
#         self.ad = a
# 实例化所经历的步骤
    # 1.类名() 之后的第一个事儿 :开辟一块儿内存空间
    # 2.调用 __init__ 把空间的内存地址作为self参数传递到函数内部
    # 3.所有的这一个对象需要使用的属性都需要和self关联起来
    # 4.执行完init中的逻辑之后,self变量会自动的被返回到调用处(发生实例化的地方)

# dog类 实现狗的属性 名字 品种 血量 攻击力 都是可以被通过实例化被定制的
# class Dog():
#     def __init__(self,name,blood,aggr,kind):
#         self.dog_name = name
#         self.hp = blood
#         self.ad = aggr
#         self.kind = kind
#
# 小白 = Dog('小白',5000,249,'柴犬')
# # print(小白.dog_name)
# # print(小白.__dict__)



# 定义一个圆形类,半径是这个圆形的属性,实例化一个半径为5的圆形,一个半径为10的圆形
    # 完成方法
    # 计算圆形面积
    # 计算圆形周长
# 定义一个用户类,用户名和密码是这个类的属性,实例化两个用户,分别有不同的用户名和密码

初识方法

class Person:       # 类名
    def __init__(self,name,sex,job,hp,weapon,ad):
        # 必须叫__init__这个名字,不能改变的,所有的在一个具体的人物出现之后拥有的属性
        self.name = name          # 对象的属性/实例变量
        self.sex = sex
        self.hp = hp
        self.ad = ad

    def 搓(self,dog):    # 方法,又有一个必须传的参数-->self对象
        dog.hp -= self.ad
        print('%s给%s搓了澡,%s掉了%s点血,%s当前血量%s'%(self.name,dog.dog_name,
                                            dog.dog_name,self.ad,dog.dog_name,dog.hp))

class Dog():
    def __init__(self,name,blood,aggr,kind):
        self.dog_name = name
        self.hp = blood
        self.ad = aggr
        self.kind = kind

    def 舔(self,person):

        # 狗舔了人,人调血,人掉的血量,应该是狗的攻击力
        if person.hp >= self.ad:
            person.hp -= self.ad
        else:
            person.hp = 0
        print(self.__dict__)
        print(person.__dict__)
        print('%s舔了%s,%s掉了%s点血,%s当前血量%s'%(self.dog_name,person.name,
                                          person.name,self.ad,person.name,person.hp))
# alex = Person('alex','不详','搓澡工',260,'搓澡巾',1)  # 对象\实例 = 类名() -->  实例化的过程
# print('alex : ',alex)
# 小白 = Dog('小白',5000,249,'柴犬')
# # alex.搓(小白)
# 小白.舔(alex)
# 小白.舔(alex)
posted @ 2020-01-13 16:31  幻海梦蝶  阅读(116)  评论(0编辑  收藏  举报