面向对象主要有三大特点:封装、继承和多态的运用以及鸭子类型参考代码(附带参考代码)

python每日学习7:面向对象主要有三大特点:封装、继承和多态的运用以及鸭子类型参考代码(附带参考代码)

  • 封装

    • 封装的定义

      • 直接在Student类的内部定义访问数据的函数,这样就把“数据”给封装起来了。这些封装数据的函数是和Student类本身是关联起来的,称之为类的方法。
    • 封装的运用

    • class Student:
          # 类中的属性
          eye = 2
      
          # name = None
          # score = None
      
          # 构造方法  在类被定义的使用就会使用
          def __init__(self, n, s):
              # self 类中的变量 全类可用
              # 类中的属性
              self.name = n
              # 私有变量  可以在类的内部去处理  安全一点 不能在外部直接去修改这个值
              self.__score = s
              # 用一个下划线 大家就会认为你是一个私有变量 (常量)
              self._sco = 1
              # print(self.eye)
              # self.print_sco()
      
          # 私有方法
          def __a(self):
              print("1")
      
          def set_score(self,new_score):
              self.__score = new_score
      
          def get_score(self):
              return self.__score
      
          # 类中的方法
          def print_sco(self):
              self.__a()
              print(f"{self.name}的成绩是{self.__score}")
      
          def get_grade(self):
              if self.__score>90:
                  print("A")
              else:
                  print("B")
      
      # def print_sco(stu:Student):
      #     print(f"{stu.name}的成绩是{stu.score}")
      
      
      if __name__ == '__main__':
      
          # 对象是类的实例  类是对象的抽象
          stu1 = {"name": "zs", "score": 90}
          stu2 = {"name": "ls", "score": 89}
          print_score(stu1)
          print_score(stu2)
      
          # 实例化一个类
          ls = Student("ls", 90)
          ls.print_sco()
          ww = Student("ww", 88)
          ww.print_sco()
          # print_sco(ls)
          ls.get_grade()
      
          # 通过类的变量直接去修改变量值
          # ls.__score = 99
          # print(ls.__score)
      
      
          # 通过我给的方法去修改
          ls.set_score(100)
          print(ls.get_score())
      
          print(ls._Student__score)
      
      
  • 继承

    • 继承的定义

      • 当定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。
      • 最大的好处是子类获得了父类的全部功能
    • 继承的运用

    • #继承
      class Animal(object):
          def __init__(self,leg,height):
              self.leg=leg
              self.height=height
          def run(self):
              print('animal run')
      
      #括号内加入父类
      class Dog(Animal):
          def __init__(self,leg,height,bark):
              # self.leg = leg
              # self.height = height
              super().__init__(leg,height)#继承父类的初始化
              self.bark=bark
          def eat(self):
              print('dog eat')
          #方法重写
          def run(self):
              #super(Dog, self).run()#调用父类的方法,相当于再一次运行父类的run
              print('dog run')#此时run运行Dog中的
      
      
      if __name__ == '__main__':
          #继承
          animal=Animal(4,1)
          dog=Dog(4,1.5,'wang')
          print(dog.run())
          print(animal.run())
          print(dog.eat())
      
  • 多态

    • 多态的定义

      • 允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。
    • 多态的运用

    • # 多态 父类的引用指向子类的对象
      # 多态的基础条件是继承
      def run_twice(animal:Animal):
          animal.run()
          animal.run()
          
      #猴子补丁:增加一个类
      def drink(self):
          print('animal drink')
      
      if __name__ == '__main__':
          #多态
          animal=Animal(5,4)
          animal=Dog(4,3,'wolf')
      
          #猴子补丁:强行增加一个属性,破坏了代码的封装性
          animal.rand=2
          print(animal.rand)
      
          Animal.drink=drink
          animal.drink=()
          # print(animal.drink())
          pass
      
  • 鸭子类型

  • # 鸭子类型
    class Duck:
        def __init__(self,name):
            self.name=name
        def bark(self):
            print(f"{self.name} is gaga")
        def swim(self):
            print(f"{self.name} is swim")
    
    class Goose:
        def __init__(self,name):
            self.name=name
        def bark(self):
            print(f"{self.name} is eee")
        def swim(self):
            print(f"{self.name} is fast")
    def dshow(duck:Duck):
        duck.bark()
        duck.swim()
    
    if __name__ == '__main__':
        danglao=Duck("danglao")
        ping=Goose("ping")
        dshow(danglao)
        dshow(ping)
    
    
  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值