• 面向对象基础知识点


    面向对象和面向过程

    面向过程:优点:复杂问题流程化,进而简单化

    ​ 缺点:可扩展性差

    面向对象

    面向过程的设计设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么,面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式

    优点是:复杂的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)

    缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。

    类与对象

    类即类别,种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

    那么问题来了,先有一个个具体存在的对象(比如一个具体存在的人),还是先有人类这个概念,这个问题需要分两种情况去看

    现实世界中:先有对象,再有类

    在程序中:务必先定义类,后产生对象

    class Stundent:
        school='oldboy'
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
        def learn(self):
            print('%s is learning' %self.name)   ##新增self.name
        def eat(self):
            print('%s is eating'%self.name)
        def sleep(self):
            print('%s is sleeping'%self.name)
            
    s1=Stundent('李钟硕','男',23)
    s2=Stundent('李二狗','男',25)
    s3=Stundent('李三狗','男',21)
    

    类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数

    注意:绑定对象的方法的这种自动传值的特征,决定了在类中定义的函数都要默认写一个参数self,self可以是任意名字,但是约定俗成地写出self

    类与对象
    	-定义类
        	class关键字  类名:
            	pass
         -产生对象
        	对象=类名()
         -类:
        	1、对象获取属性和方法
            	类.__dict__
            2、类来调用属性和方法
            	通过dict来取
                类名.属性/函数
         -对象:
        	1、对象获取属性和方法
            	对象.__dict__
            2、对象来调用属性和方法
            	对象.属性/方法
                
    产生对象(绑定方法,属性的查找顺序)
    		-属性查找顺序
        		-先从对象自身找----》类中找----》保错
            -对象赋属性
            	-方式一:
                	stu1=Student()
                    stu1.name='lzs'
                -方式二:
                	-在类中定义该方法,方法上写一些参数
                    -在对象实例化产生对象时,在括号中传的值,会被传到__init__中
            -绑定方法:
            	-定义在类内部
                -对象来调用,会自动把对象传过来,在方法内部就可以修改该对象          
    class Student:
        #变量表示属性
        school='oldboy'
        #__init__看好名字,不是__int__
        def __init__(x,name):
            x.name=name
        def choose(self)
        	print('===选课===')
        def study(self):
            print('%s学会了python'%self.name)
    stu1=Student('lzs')
    stu1.study()
    ##lzs学会了python
        
    
    一切皆对象  
    #类即类型
    ll=[1,2,3]
    #类实例化产生对象
    l1=list([1,2,3])
    l2=list([5,7,8])
    #对象调用对象的绑定方法,修改对象自己
    
    l1.append(5)
    print(l1)
    
    list.append(l1,9)
    print(l1)
    print(type(l1))
    
    

    人狗大战:

    class  Dog:
        type_dog='藏獒'
        def __init__(self,name,aggressivity,hp=100):
            self.name=name
            self.aggressivity=aggressivity
            self.hp=hp
        def bite(self,target):
    
            ##当前狗的攻击力:self.aggressivity
            ##人的血量:target.hp
    
            target.hp-=self.aggressivity
            print('''
            狗的品种:%s
            %s狗咬了一下%s人
            人掉血:%s
            人的血量剩余:%s 
            '''%(self.type_dog,self.name,target.name,self.aggressivity,target.hp))
    
    class Human:
        def __init__(self,name,aggressicity,hp=100):
            self.name=name
            self.aggressivity=aggressicity
            self.hp=hp
        def bite(self,target):
            target.hp-=self.aggressivity
            print('''
            %s人咬了一下%s狗,
            狗掉血:%s
            狗的血量:%s
            '''%(self.name,target.name,self.aggressivity,target.hp))
    ##实例化产生狗对象
    dog1=Dog('旺财',10,200)
    nick=Human('nick',50)
    dog1.bite(nick)
    print(nick.hp)
    

    游戏打斗:

    class yuji:
        camp='虞姬'
        def __init__(self,nickname,
                     aggressivity=54,
                     life_value=414,
                     money=1001,
                     armor=3):
            self.nickname=nickname
            self.aggressivity=aggressivity
            self.life_value=life_value
            self.money=money
            self.armor=armor
            ##enemy:仇人  damage:损伤
        def attack(self,enemy):
            damage_value=self.aggressivity-enemy.armor
            enemy.life_value-=damage_value
    
    
    class luban:
        camp='鲁班'
        def __init__(self,nickname,
                     aggressivity=58,
                     life_value=455,
                     money=100,
                     armor=10):
            self.nickname=nickname
            self.aggressivity=aggressivity
            self.life_value=life_value
            self.money=money
            self.armor=armor
        def attack(self,enemy):
            damage_value=self.aggressivity-enemy.armor
            enemy.life_value-=damage_value
    
    
    class BlackCleaver:
        def __init__(self,price=475,aggressivity=9,life_value=100):
            self.price=price
            self.aggressivity=aggressivity
            self.life_value=life_value
        def update(self,obj):
            obj.money-=self.price
            obj.aggressivity+=self.aggressivity
            obj.life_value+=self.life_value
        def fire(self,obj):
            obj.life_value-=1000
    
    
    r1 = yuji('虞姬')
    g1 = luban('鲁班')
    b1 = BlackCleaver()
    print('''
    虞姬的攻击力为%s,
    生命值为%s,
    账户余额为%s
    '''%(r1.aggressivity,r1.life_value,r1.money))
    
    print('''
    鲁班的攻击力为%s,
    生命值为%s,
    账户余额为%s
    '''%(g1.aggressivity,g1.life_value,g1.money))
    
    if r1.money>b1.price:
        print('虞姬购买多兰之刃成功')
        r1.aggressivity+=9
        r1.life_value+=100
        r1.money-=475
        print('''
        虞姬的攻击力为%s
        虞姬的生命值为%s
        虞姬的账户余额为%s    
        '''%(r1.aggressivity,r1.life_value,r1.money))
    count=0
    while True:
        r1.attack(g1)
        count+=1
        g1.life_value-=r1.aggressivity
        print('''
        鲁班受到一次攻击,生命值为%s
        '''%(g1.life_value))
        if g1.life_value<0:
            break
    print(f'鲁班受到{count}攻击死亡')
    
    既然选择了远方,只能风雨兼程
  • 相关阅读:
    springboot自动装配原理
    @Inherited 注解的作用
    基础知识点:链表反转
    基础知识点:二叉树的层次遍历
    算法题:8、二进制中1的个数
    微服务_GPRC
    扎实基础_数据结构
    .net core3.0程序发布到linux+docker
    c#_安全漏洞总结
    IIS Express(电脑无管理员权限如何启用VS调试)
  • 原文地址:https://www.cnblogs.com/lzss/p/11461168.html
Copyright © 2020-2023  润新知