python中的三大特点:封装 继承 多态

面向对象的三大特点:

封装:将有一定功能的代码封装起来,使用时调用即可
继承:将公共的属性和方法放在父类中,自己自考虑特有的属性和方法。
多态:程序运行过程中,根据执行条件的不同,动态执行不同的操作代码的过程称为运行时多态。

一 封装

1.封装是面向对象编程的一大特点
2.面向对象编程的第一步,将属性和方法封装到一个抽象的类中
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部

封装的示例

小明和小美爱跑步
1.小明体重75.0公斤
小美体重45.0公斤
2.小明每次跑步会减肥0.5公斤
3.小明每次吃东西体重会增加1公斤

class Person:
    def __init__(self, name, weight):
        # 在初始化方法中增加两个参数由外界传递
        # self.属性 = 形参
        self.name = name
        self.weight = weight

    def __str__(self):
        return '我的名字叫 %s 体重是 %.2f' % (self.name, self.weight)

    def run(self):
        # pass
        print '%s 爱跑步' % self.name
        # 在对象方法的内部,是可以直接访问对象的属性
        self.weight -= 0.5
    def eat(self):
        #pass
        print '%s 吃东西' % self.name
        self.weight += 1

xiaoming = Person('小明',75.5)

xiaoming.run()
xiaoming.eat()
print xiaoming

xiaomei = Person('小美',45.0)
xiaomei.eat()
xiaomei.run()

# 同一个类创建的多个对象之间,属性互补干扰
print xiaomei
print xiaoming

这里写图片描述

一个对象的属性可以是另外一个类创建的对象

示例需求

1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 --增加子弹的数量
Soldier        Gun
---------      ------------
name            model
gun             bullet_count
----------     -------------
__init__(self) __init__(self)
fire(self)     add_bullet(self,count)
               shoot(self)
class Gun:
    def __init__(self, model):
        # 枪的型号
        self.model = model
        # 子弹的数量
        self.bullet_count = 0
    def add_bullet(self,count):
        self.bullet_count += count
    # 只要子弹的数量足够,就能发射,所有shoot方法不需要传递参数
    def shoot(self):
        # 1.判断子弹的数量
        if self.bullet_count <= 0:
            print '[%s] 没有子弹了...' %self.model
            return
        # 2.发射子弹,子弹数量-1
        self.bullet_count -= 1
        # 3.提示发射信息
        print '[%s] 突突突...[%d]' %(self.model,self.bullet_count)


class Soldier:
    def __init__(self,name):
        self.name = name
        # 定义属性的时候,如果不知道设置什么初始值,可以设置为None
        # None关键字表示什么都没有,表示一个空对象,没有方法和属性
        # 是一个特殊的常量,可以将None赋值给任何一个变量
        self.gun = None

    def fire(self):
        # 1.判断士兵是否有枪
        if self.gun == None:
            print '[%s] 还没有枪...' %self.name
            return
        print 'go!!! [%s]' %self.name
        self.gun.add_bullet(50)
        self.gun.shoot()

# 1.创建枪对象
ak = Gun('AK47')
# 2.创建瑞恩   # 枪不能自己发射子弹,枪不能自己开火 需要士兵去完成
ryan = Soldier('Ryan')
ryan.gun = ak
ryan.fire()

这里写图片描述

二 继承

继承:实现代码的重用,相同的代码不需要重复的写

1 单继承

1.继承的概念:子类拥有父类的所有属性和方法(子类只需要封装自己特有的方法)
2.语法
class 类名(父类):
    def 子类特有的方法

示例:

class Student:  #定义父类
    def study(self):
        print '学生要学习'
    def practice(self):
        print '学完要练习'
    def play(self):
        print '练习完要玩耍'
    def sleep(self):
        print '玩耍后睡觉觉'

class homie(Student):
    # 子类拥有父类的所有属性和方法
    def call(self):
        print '开黑'

Bob = homie()
Bob.study()
Bob.practice()
Bob.play()
Bob.sleep()
Bob.call()
# 子类继承自父类,可以直接享受父类中已经封装好的方法

这里写图片描述
2 继承的传递性

class Student:
    def study(self):
        print '学生要学习'
    def practice(self):
        print '学完要练习'
    def play(self):
        print '练习完要玩耍'
    def sleep(self):
        print '玩耍后睡觉觉'

class homie(Student):
    # 子类拥有父类的所有属性和方法
    def call(self):
        print '开黑'

class homie1(homie):  # 继承的传递性 子类拥有父类的父类的属性和方法
    def LOL(self):
        print '三人开黑'

james =homie1()
james.study()
james.practice()
james.play()
james.sleep()
james.call()
james.LOL()

这里写图片描述
3 重写父类和扩展

覆盖父类的方法(重写父类方法)
如果子类中,重写了父类的方法
在运行中,只会调用在子类中重写的方法而不会调用父类的方法

class Student:
    def study(self):
        print '学生要学习'
    def practice(self):
        print '学完要练习'
    def play(self):
        print '练习完要玩耍'
    def sleep(self):
        print '玩耍后睡觉觉'

class Homie(Student):
    # 子类拥有父类的所有属性和方法
    def call(self):
        print '开黑'

class Homie1(Homie):
    def LOL(self):
        print '三人开黑'
    def call(self):
        # 1.针对子类特有的需求,编写代码
        print '我的homie一起在一起'
        # 2.调用原本父类中封装的方法
        Homie.call(self)          #重写之后并没有改变父类的方法
        # 3.增加其他子类代码
        print '我们需要五黑'       #对父类方法进行扩展

james =Homie1()
james.call()
james.LOL()

这里写图片描述
4 多继承

子类拥有一个父类叫作单继承
子类可以拥有多个父类,并且具有所有父类的属性和方法
例如:孩子会继承自己父亲和母亲的特征

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 方法'


class C(B,A):        #谁在前面调用谁,当然也可以指定调用父类的方法
    """多继承可以让子类对象,同时具有多个父类的属性和方法"""
    pass

# 创建子类对象
c = C()
c.test()
c.demo()

这里写图片描述

三 多态

多态(以封装和继承为前提)
面向对象的三大特征:
1.封装:根据职责将属性和方法封装到一个抽象的类中
2.继承:实现代码的重用,相同的代码不需要重复的编写
子类针对自己特有的需求,编写特定的代码
3.多态:不同的子类对象调用相同的方法,产生不同的执行结果
1.多态可以增加代码的灵活度
2.以继承和重写父类的方法为前提
3.调用方法,不会影响到类的内部设计

class Dog(object):
    def __init__(self,name):
        self.name=name
    def game(self):
        print '%s喜欢耍'%self.name

class Goddog(Dog):
    def game(self):
        print '%s喜欢hotdog'%self.name
       # Dog.game(self)

class Person(object):
    def __init__(self,name):
        self.name=name
    def game_with_dog(self,dog):
        print '%s和%s一起耍'%(self.name,dog.name)


Hotdog=Goddog('Hotdog')
zhangzhenyue=Person('张震岳')
zhangzhenyue.game_with_dog(Hotdog)

这里写图片描述

  • 48
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
封装继承多态是面向对象编程的三个重要概念。 1. 封装(Encapsulation):封装是指将数据和操作数据的方法封装在一起,形成一个。通过封装,我们可以隐藏的内部实现细节,只暴露出对外的接口,提高了代码的安全性和可维护性。 2. 继承(Inheritance):继承是指一个可以继承另一个的属性和方法。通过继承,子可以直接使用父的属性和方法,同时还可以在子添加新的属性和方法,实现代码的复用和扩展。 3. 多态(Polymorphism):多态是指同一个方法可以根据不同的对象调用出不同的行为。通过多态,我们可以在不改变方法的情况下,根据不同的对象调用相同的方法,实现了代码的灵活性和可扩展性。 在Python封装通过的定义来实现,继承通过在子名后面加上父名来实现,多态则是Python的一种动态型语言特性,不需要显式声明。 以下是一个示例代码,演示了Python封装继承多态的含义: ```python # 封装 class Animal: def __init__(self, name): self.name = name def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" dog = Dog("Buddy") cat = Cat("Kitty") print(dog.speak()) # 输出:Woof! print(cat.speak()) # 输出:Meow! # 继承 class Person: def __init__(self, name): self.name = name def say_hello(self): print("Hello, my name is", self.name) class Student(Person): def __init__(self, name, grade): super().__init__(name) self.grade = grade def say_hello(self): super().say_hello() print("I am in grade", self.grade) person = Person("John") student = Student("Alice", 10) person.say_hello() # 输出:Hello, my name is John student.say_hello() # 输出:Hello, my name is Alice\nI am in grade 10 # 多态 def make_sound(animal): print(animal.speak()) dog = Dog("Buddy") cat = Cat("Kitty") make_sound(dog) # 输出:Woof! make_sound(cat) # 输出:Meow! ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值