day22 面向对象

Posted wujunjie-sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day22 面向对象相关的知识,希望对你有一定的参考价值。

# 基础数据类型
# 函数
    # 基础
    # 装饰器  (进阶可以放着)
    # 迭代器和生成器 (生成器 需要熟练掌握yield)
    # 递归函数(能看懂)
    # 内置函数和匿名函数 (内置函数中的红色、黄色函数要记住)
# 模块 —— 现成的东西 直接拿来用
# 包 —— 相对导入(放着)
# 正则表达式 —— 至少掌握元字符和量词 网站上的那些常用正则表达式要看懂
# 异常处理 —— 会用
# dict
# d = {‘k‘:‘v‘}
#
# list
# [1,2]
# print(dict)   # 类
# print(d)      # 对象

# 自定义类
# def 函数名():
#     pass

# class 类名:
#     属性 = ‘a‘
#
# print(类名.属性)
# 类名的作用 就是操作属性 查看属性

# class Person:                 # 类名
#     country = ‘China‘         # 创造了一个只要是这个类就一定有的属性
#                                # 类属性 静态属性
#     def __init__(self,*args):  # 初始化方法,self是对象,是一个必须传的参数
#         # self就是一个可以存储很多属性的大字典
#         self.name = args[0]   # 往字典里添加属性的方式发生了一些变化
#         self.hp = args[1]
#         self.aggr = args[2]
#         self.sex = args[3]
#
#     def walk(self,n):         # 方法,一般情况下必须传self参数,且必须写在第一个
#                               # 后面还可以传其他参数,是自由的
#         print(‘%s走走走,走了%s步‘%(self.name,n))
#
# # print(Person.country)        # 类名 可以查看类中的属性,不需要实例化就可以查看
# alex = Person(‘狗剩儿‘,100,1,‘不详‘)  # 类名还可以实例化对象,alex对象   # 实例化
# # print(alex.__dict__) # 查看所有属性
# print(alex.name)  # 查看属性值
# # print(alex.hp)  # 查看属性值
# alex.walk(5)    # Person.walk(alex,5)  # 调用方法 类名.方法名(对象名)

# print(Person.__dict__[‘country‘])
# Person.__dict__[‘country‘] = ‘印度‘
# print(alex.__dict__[‘name‘])
# alex.__dict__[‘name‘] = ‘二哥‘
# print(alex.__dict__)
# print(alex.name)
# print(alex.name)
# alex.name = ‘二哥‘
# alex.__dict__[‘name‘] = ‘二哥‘
# alex.age = 83
# print(alex.__dict__)
# print(alex.name)

# 对象 = 类名()
# 过程:
    # 类名() 首先 会创造出一个对象,创建了一个self变量
    # 调用init方法,类名括号里的参数会被这里接收
    # 执行init方法
    # 返回self
# 对象能做的事:
    # 查看属性
    # 调用方法
    # __dict__ 对于对象的增删改查操作都可以通过字典的语法进行
# 类名能做的事:
    # 实例化
    # 调用方法 : 只不过要自己传递self参数
    # 调用类中的属性,也就是调用静态属性
    # __dict__ 对于类中的名字只能看 不能操作

# 人狗大战
def Dog(name,blood,aggr,kind):
    dog = {
        name: name,
        blood: blood,  # 血量
        aggr: aggr,  # 攻击力
        kind: kind,
    }
    def bite(person):
        person[blood] -= dog[aggr]
        print(%s被咬了,掉了%s的血 % (person[name], dog[aggr]))
    dog[bite] = bite
    return dog

def Person(name,blood,aggr,sex):
    person = {
        name : name,
        blood: blood,   # 血量
        aggr: aggr,      # 攻击力
        sex:sex,
    }
    def attack(dog):
        dog[blood] -= person[aggr]
        print(%s被打了,掉了%s的血 % (dog[name], person[aggr]))
    person[attack] = attack
    return person

# 代码精简了 方便增加人物 方便修改 人物更加规范  —— 人模子



jin = Dog(金老板,1000,100,teddy)
alex = Person(狗剩儿,100,1,不详)
# nezha = Person(‘哪吒‘,200,2,‘不详‘)
print(jin)
jin[bite](alex)
alex[attack](jin)
# Dog函数和Person函数 都是定义了一类事物
# 直到调用了函数,赋值了之后才真的有了一个实实在在的人或狗


# 面向对象编程
# 所谓模子 就是 类 抽象的 我能知道有什么属性 有什么技能 但不能知道属性具体的值
# jin alex nezha 就是对象 有具体的值,属性和技能都是根据类规范的
class Dog:
    def __init__(self,name,blood,aggr,kind):
        self.name = name
        self.hp = blood
        self.aggr = aggr
        self.kind = kind
    def bite(self,person):
        # 狗咬人,人掉血
        person.blood -= self.aggr

class Person:
    def __init__(self,name,blood,aggr,sex):
        self.name = name
        self.blood = blood
        self.aggr = aggr
        self.sex = sex
    def attack(self,dog):
        dog.hp -= self.aggr
        if dog.hp <= 0:
            print(%s打了%s,%s被打死了,扑街~~~%(self.name,dog.name,dog.name))
        else:
            print(%s打了%s,掉了%s血%(self.name,dog.name,self.aggr))

jin = Dog(金老板,100,20,teddy)
# print(jin.name)
alex = Person(alex,999,998,不详)
jin.bite(alex)   # Dog.bite(jin,alex)
print(alex.blood)
# alex attack
alex.attack(jin)  # Person.attack(alex,jin)
print(jin.hp)

 

以上是关于day22 面向对象的主要内容,如果未能解决你的问题,请参考以下文章

DAY22面向对象

22年最新Java笔记:day7-Java面向对象

day22 面向对象初级

Python开发基础-Day22反射面向对象进阶

day22 面向对象

Python基础day-22[面向对象:反射,其他命令参数]