面向对象基础知识点

Posted lzss

tags:

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

面向对象和面向过程

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

? 缺点:可扩展性差

面向对象

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

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

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

类与对象

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

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

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

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

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攻击死亡')

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

面向对象基础知识点

重温设计模式系列面向对象基础知识

面向对象概念基础知识

JavaScript 面向对象开发知识基础总结

设计模式_基础知识

设计模式_基础知识