python面向对象学习

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

面向对象三个概念:
1.封装
即把客观事物封装成抽象的类,并且类可以把自己的数据和方法让可信的类进行操作,对不可信的进行隐藏

class Cat(Animal):
    def bite(self):
        print("猫咪咬")

lanmao = Cat()

2.继承
一个类可以继承其他一个类的属性和方法,比如我们定义一个动物类和猫咪类,猫咪继承动物,这样实例化一个猫咪对象时,猫咪也继承了动物类的跑方法
如果需要继承

class Animal:
    def run(self):
        print("跑得快")

class Cat(Animal):
    def bite(self):
        print("猫咪咬")

lanmao = Cat()
lanmao.run()

>>跑得快

使用继承时,通常会用到super()方法,在python2中,通常需要在super()中加上Object,python3不需要添加,可以使用super()提高代码的可复用性、可维护性
以下函数,Cat类继承Animal中的初始化中的方法

class Animal:
    def __init__(self,life):
        self.life = life
        print(self.life)

class Cat(Animal):
    def __init__(self,life):
        super().__init__(life)
        self.life = life
a = Animal(223)
mimi = Cat(45)

>>223
45

3.多态
看如下代码,当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。在子类调用run方法时,无论子类怎样调用,都不会影响到其他子类继承父类的方法去调用使用

class Animal:
    def run(self):
        print("跑得快")

class Cat(Animal):
    def bite(self):
        print("猫咪咬")
    def run(self):
        print("猫咪在跑")
class Dog(Animal):
    def laugh(self):
        print("小狗在笑")

lanmao = Cat()
wangcai = Dog()
lanmao.run()
wangcai.run()

>>猫咪在跑
跑得快

在业务编写时,需要发掘重要的业务领域概念,建立业务领域概念之间的关系,找名词,加属性,连关系
其中对象之间的还有各种依存关系,限于篇幅和笔者个人能力不一一赘述

class Role(object):
    def __init__(self,name,role,weapon,attack,life_value = 100,money = 10000):
        self.name = name
        self.role =role
        self.weapon = weapon
        self.life_value = life_value
        self.money = money
        self.attack = attack
    def shot(self,other):
        print('%s 在射击' %self.name)
        print('%s跟%s在中路拼枪' %(self.name,other.name))
        self.life_value = int(self.life_value)-int(other.attack)
        if self.life_value > 0:
            print('%s活下来了,还剩下%s血'%(self.name,self.life_value))
        else:
            print('%s挂了,充点钱吧,充钱才能更强'%self.name)
    def get_shot(self,attract):
        # self.life_value -= int(attract)
        print('%s 被射中了,还剩下%s 血' %(self.name,self.life_value))

    def arm(self,gun):
        self.attack =int(self.attack)+int(gun.attack)
        self.weapon = gun.name
        self.money =int(self.money)-int(gun.money)
        print('%s %s 装备了%s,攻击力提升啦,竟然达到了惊人的%s 点' %(self.role,self.name,
                                                  self.weapon,self.attack))
        print('%s 买了%s,还剩下 %s元钱' %(self.name,gun.name,self.money))

class Gun(object):
    def __init__(self,name,attack,money):
        self.name=name
        self.attack = attack
        self.money = money
ak47 = Gun('AK47','89','3000')
an94 = Gun('AN94','90','5000')
lsj  = Role('lsj','police','knief',10)
wyz  = Role('wyz','bandit','knief',10)

lsj.arm(ak47)
wyz.arm(an94)
lsj.shot(wyz)
wyz.shot(lsj)