面向对象

引出面向对象/面向对象编程

引出面向对象

游戏公司

人狗大战

人:

  • 名字 性别 职业

  • 技能

狗:

  • 名字 品种 血条

  • 技能

alex = {
        'name':'alex',
        'sex':'不详',
        'job':'搓澡工',
        'level': 0,
        'hp':250,
        'weapon':'搓澡巾',
        'ad':1
        }
​
xiaobai = {
    'name':'小白',
    'kind':'泰迪',
    'hp':5000,
    'ad':249
}
1.你怎么保证所有的玩家初始化的时候都拥有相同的属性
2、每来一个新的玩家,我们都自己手动的创建一个字典,然后向字典中填值
3、人物和狗的技能如何去写
def Person(name,sex,job,hp,weapon,ad,level=0):   # 人模子
    dic = {
        'name':name,
        'sex':sex,
        'job':job,
        'level': level,
        'hp':hp,
        'weapon':weapon,
        'ad':ad
        }
    return dic
​
alex = Person('alex','不详','搓澡工',250,'搓澡巾',1)
wusir = Person('wusir','male','法师',500,'打狗棒',1000)


# 这样就解决:
### 1.你怎么保证所有的玩家初始化的时候都拥有相同的属性
### 2、每来一个新的玩家,我们都自己手动的创建一个字典,然后向字典中填值

def Dog(name,kind,hp,ad):
    dic = {
        'name':'小白',
        'kind':'泰迪',
        'hp':5000,
        'ad':249
        }
    return dic
​
xiaobai = Dog('alex','泰迪',5000,249)
xiaojin = Dog('小金','柯基',10000,499)
​
def cou(person,dog):
    dog['hp'] -= person['ad']
    print(f'{person["name"]}攻击了{dog["name"]},{dog["name"]}掉了{person["ad"]}点血')
​
cou(alex,xiaobai)

这样就解决:

1.你怎么保证所有的玩家初始化的时候都拥有相同的属性
2、每来一个新的玩家,我们都自己手动的创建一个字典,然后向字典中填值
def Person(name,sex,job,hp,weapon,ad,level=0):   # 人模子
    def cou(dog):
        dog['hp'] -= dic['ad']
        print(f'{dic["name"]}攻击了{dog["name"]},{dog["name"]}掉了{dic["ad"]}点血')
    dic = {
        'name':name,
        'sex':sex,
        'job':job,
        'level': level,
        'hp':hp,
        'weapon':weapon,
        'ad':ad,
        'action':cou
        }
    return dic
​
alex = Person('alex','不详','搓澡工',250,'搓澡巾',1)
wusir = Person('wusir','male','法师',500,'打狗棒',1000)
​
def Dog(name,kind,hp,ad):
    def zhua(person):
        person['hp'] -= dic['ad']
        print(f'{dic["name"]}抓了{person["name"]},{person["name"]}掉了{dic["ad"]}点血')
    dic = {
        'name':name,
        'kind':kind,
        'hp':hp,
        'ad':ad,
        'action':zhua
        }
    return dic
​
xiaobai = Dog('alex','泰迪',5000,249)
xiaojin = Dog('小金','柯基',10000,499)
​
# def cou(person,dog):
#     dog['hp'] -= person['ad']
#     print(f'{person["name"]}攻击了{dog["name"]},{dog["name"]}掉了{person["ad"]}点血')
#
# cou(alex,xiaobai)
#
# def zhua(dog,person):
#     person['hp'] -= dog['ad']
#     print(f'{dog["name"]}抓了{person["name"]},{person["name"]}掉了{dog["ad"]}点血')
​
# zhua(xiaojin,wusir)
xiaobai['action'](alex)
alex['action'](xiaojin)

​面向过程:想要一个结果,写代码,实现计算结果
面向对象开发: 有哪些角色,角色的属性和技能 两个角色之间是如何交互的
复杂的,拥有开放式结局的程序,比较适合使用面向对象开发
  • 游戏

  • 购物


面向对象编程

# 先来定义模子,用来描述一类事物
# 具有相同的属性和动作
class Person:                # 类名
    def __init__(self,name,sex,job,hp,weapon,ad,level=0,):      # 必须叫 __init__这个名字,不能改变的,所有的在一个具体的人物出现之后拥有的属性
        print('--'*20)
        self.name = name
        self.sex = sex
        self.job = job
        self.weapon = weapon
        self.ad = ad
        self.level = level
        print('**'*20)
alex = Person('alex','不详','程序员',250,1,0)   # alex就是对象, alex=Person()的过程,就是通过类获取一个对象的过程,就是实例化
# print(alex.name)
# 类名()会自动调用类中的__init__的方法

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

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

print(alex.__dict__)   # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 0, 'level': 0}

# 实例化之后的对象的属性增删改查
alex.age = 100
print(alex.__dict__)    # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 0, 'level': 0, 'age': 100}

alex.ad = 100
print(alex.__dict__)   # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 100, 'level': 0, 'age': 100}

print(alex.name)        # alex

print(alex.__dict__) # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 100, 'level': 0, 'age': 100}
del alex.age
print(alex.__dict__)  # {'name': 'alex', 'sex': '不详', 'job': '程序员', 'weapon': 1, 'ad': 100, 'level': 0}


# 字典创建的一个空间,当value值发生改变时,字典的id是不变的。
d = {'k':'v'}
print(d,id(d))       # {'k': 'v'} 1520594861336
d['k'] = 'vvvv'
print(d,id(d))       # {'k': 'vvvv'} 1520594861336

image

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




----------------  end -------------------

posted @ 2020-05-19 15:12  全爱国  阅读(141)  评论(0编辑  收藏  举报