python面向对象三大特性(封装,继承,多态)

封装

封装是从业务逻辑中抽象对象时,要赋予对象相关数据与操作,将一些数据和操作打包在一起的 过程。封装是使用对象的主要魅力之一,它提供了一个简单方法来创建复杂方案,解决了世界是如何工作的这一问题,我们自然的认为周围的世界是由相互作用的对 象组成,每个对象都有自己相关的数据,并能完成一定的功能,从设计的角度来看,封装还提供了一个重要的服务,它分开了是什么和怎么做这两个问题。对象的实 现与使用是相互独立的,封装的另外一个优势是支持代码复用,它可以将常用功能以组件方式打包起来。

举例01:

# XX 爱跑步
# 当跑步时体重减0.5
# 当吃饭时体重增加1

class Person(object):
    def __init__(self,name,weight):
        self.weight = weight
        self.name = name
        print '%s爱跑步' % self.name
    def run(self):
        self.weight -= 0.5
        print '%.2f' % self.weight
    def eat(self):
        self.weight += 1.0
        print '%.2f' % self.weight
name1 = Person('guodong',90)
#name1.run()
name1.eat()

name2 = Person('xubowen',45)
name2.run()
#name2.eat()

运行结果:

举例02:

    ##摆放家具
    # 需求
    # 1房子有户型,总面积和家具名称列表
            新房子没有任何家具
    # 2家具有名字和占地面积,其中
        床:占4平米
        衣柜:占2平米
        餐桌:占1.5平米
    # 3将以上三间家具添加到房子中
    # 4打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

class Jiaju():
    pass
    # 初始化方法
    def __init__(self,name,area):
        self.name = name
        self.area = area
    def __str__(self):
        return '[%s] 的占地面积为 %.2f' % (self.name,self.area)
# 添加家具
bed = Jiaju('bed',4)
print bed
chest = Jiaju('chest',2)
print chest
table = Jiaju('table',1.5)
print table


class House():
    def __init__(self,type,area):
        self.type = type
        self.area = area

        self.free_area = area
        #定义家具列表
        self.item_list = []
    def __str__(self):
        return ('户型: %s\n 总面积: %.2f\n 剩余面积: %.2f\n 家具: %s'
                % (self.type,self.area,self.free_area,self.item_list))
    def add_item(self,item):
        # 判断房间是否可以摆下家具
        if item.area > self.free_area:
            print '%s占地面积过大,无法放入' % item.name
            return
        else:
            self.item_list.append(item.name)
            self.free_area -= item.area
        print '添加 %s' % item

myhome = House('两室一厅',100)

myhome.add_item(bed)
myhome.add_item(chest)
myhome.add_item(table)
print myhome

运行结果:

举例03-士兵开火:

class Gun():
    def __init__(self,model):
        self.model = model
        self.bullet_count = 0
    def __str__(self):
        return '士兵枪的型号是 %s' % (self.model)

    def add_bullet(self,count):
        self.bullet_count += count
    def shoot(self):
        if self.bullet_count <= 0:
            print '%s 没有子弹了' % self.model
            return
        else:
            self.bullet_count -= 1
            print '%s 突突突 %d' % (self.model,self.bullet_count)

class Soldier():
    def __init__(self,name):
        self.name = name
        self.gun = None
    def fire(self):
        if self.gun == None:
            print '%s 还没有枪。。' % self.name
            return
        else:
            print 'go !!! %s' % self.name
            self.gun.add_bullet(50)
            self.gun.shoot()

ak47 = Gun('AK47')
ak47.add_bullet(50)
ak47.shoot()

ryan = Soldier('Ryan')
ryan.gun = ak47
print ryan.gun
print ryan

运行结果:

继承

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Baseclass、Super    class)

举例01:

class Animal():
    def eat(self):
        print '吃'
    def drink(self):
        print '喝'
    def run(self):
        print '跑'
    def sleep(self):
        print '睡'
class Cat(Animal):
    def call(self):
        print 'miomio~'

class Hellokitty(Cat):
    def speak(self):
        print '我会说日语'
ly = Hellokitty()
ly.call()
ly.drink()
ly.eat()
ly.run()
ly.sleep()
ly.speak()

运行结果:

举例02-多继承:

# 多继承:
    # 子类可以继承父类的属性和方法叫做单继承
    # 子类可以继承多个父类的属性和方法叫多继承
class A():
    def test(self):
        print 'A----test 方法'
    def demo(self):
        print 'A----demo 方法'

class B():
    def test(self):
        print 'B----test 方法'
    def demo(self):
        print 'B----demo 方法'

# A B那个在前面调用那个
class C(B,A):
    # 多继承可以让子类同时具有多个父类的属性和方法
    pass

c = C()
c.test()
c.demo()

运行结果:

多态
多态意味着多种形式,当用面向对象时,它是指对象是怎么回应一个依赖于对象类型或种类的消息。多态的作用是让程序在不同情况下用一个函数名启用不同的方法。不同的子类,对象调用相同的方法,产生不同的执行结果

举例01:

class Dog(object):
    def __init__(self,name):
        self.name = name
    def game(self):
        print '%s 蹦蹦跳跳的玩' % self.name

class Xiaotianquan(Dog):
    def __init__(self,name):
        self.name  = name
    def game(self):
        print '%s 飞到天上玩' % self.name

class Person(object):
    def __init__(self,name):
        self.name = name
    def game_with_dog(self,dog):
        print '%s 和 %s 快乐的玩耍' % (self.name,dog.name)
        dog.game()
# 调用的Xiaotianquan类,将执行这个类中的game方法
wangcai = Xiaotianquan('旺财')
xiaoming = Person('小明')
xiaoming.game_with_dog(wangcai)

运行结果:

举例02:

class Car(object):
    def __init__(self,name):
        self.name = name
    def Func(self):
        print '%s 可以在路上开' % self.name

class Bianxingjingang(Car):
    def __init__(self,name):
        self.name = name
    def Func(self):
        print '%s 可以变成机器人' % self.name


class Person(object):
    def __init__(self,name):
        self.name = name
    def Use_Car(self,car):
        print '%s 可以驾驶 %s' % (self.name,car.name)
        car.Func()
dahuangfeng = Bianxingjingang('大黄蜂')
guodong = Person('郭栋')
guodong.Use_Car(dahuangfeng)

运行结果:

猜你喜欢

转载自blog.csdn.net/gd0306/article/details/81166912