• 面象对象 基础篇


    oop 面象对象

    面向对象的特性:封装、继承、多态,利用 类、对象

    class类: 对一类相同属性的对象抽象、蓝图、原型, 在类中定义这些对象都具备的属性

    object对象: 类实例化后的实例

    Encapsulation封装:对数据的赋值、内部调用对外部用户是透明的
    作用:防止数据被随意修改,外部程序不需要关心对象内部构造,通过对外提供的接口直接访问即可

    Inheritance继承:父类 ==> 子类 以最少代码的方式实现不同角色的共同点和不同点

    Polymorphism

    多态:对不同类的对象发出相同的消息将会有不同的行为(一种表现形式,多种形态)

     1 class Animal(object):
     2     def __init__(self,name):
     3         self.name = name
     4 
     5     def talk(self):
     6         raise "Error is raise"
     7 
     8 class Cat(Animal):
     9     def talk(self):
    10         return "Mcow!"
    11 
    12 class Dog(Animal):
    13     def talk(self):
    14         return 'Woof! Woof!'
    15 
    16 d = Dog("d1")
    17 c = Cat("c1")
    18 
    19 
    20 # Animal.talk(d)
    21 # Animal.talk(c)
    22 
    23 def animal_talk(obj):
    24     print(obj.talk())
    25 
    26 animal_talk(d)
    27 animal_talk(c)
    多态

    新式类与经典类

    1、语法区别:

      class Person(object):    super   # 新式类

      class Person:   # 经典类

    2、继承顺序的区别:(python2中能看到效果)

      广度查询:从左往右,先查找同一级的继承函数(新式类)

      深度查询:先把左边的继承都查完,左边都没有后在查右边的(经典类)

    构造函数、析构函数、属性

    def __init__(self): 构造函数、构造方法
    def say(self): 类的方法

    类 ----》 实例化 ----》 实例对象

    __init__构造函数
    self.name = name # 属性,成员变量

    def sayhi() # 方法, 动态属性

    class Role(object):
      nationality = "CN" # 公有属性
      def __init__(self,name):
        self.name = name
        self.__age = 18 # 私有属性
      def __del__(self):  # 析构函数,在函数执行完成后执行的函数
        print("del run...")

    r1 = Role("caoy")

    Role.nationality = "US" # 更改类的公的属性

    公有属性:在类里面定义的属性、类中的函数方法也是公有属性,实例对其进行引用

    私有属性:对外不可访问print(r1.__age),对内可访问
    只想外面可访问但不可改:
    def get_age(self):
      return self.__age
    强制访问私有属性:
    r1._Role__age

    继承

    继承: 继承的类称为“基类”、“父类”或“超类”
    创建新类称为“子类”或“派生类”
    一个类可以继承多个基类
    通过“继承”和“组合”实现

    实现方式: 实现继承(不需要额外代码)、接口继承(重新父类的方法)

    多继承:
      2.7 经典类:深度优先 新式类:广度优先
      3.x 均是广度优先

     1 class Person(object):
     2 
     3     def __init__(self,name,age):
     4         self.name = name
     5         self.age = age
     6         self.sex = "noraml"
     7 
     8     def talk(self):
     9         print('Person is talking....')
    10 
    11 class WhitePerson(Person):
    12     pass
    13 
    14 
    15 class BlackPerson(Person):
    16     def __init__(self,name,age,strength):
    17         Person.__init__(self,name,age)
    18         self.strength = strength
    19 
    20         print(self.name, self.age, self.sex, self.strength)
    21 
    22     def talk(self):
    23         print("black person [%s] is blala..." % self.name)
    24 
    25     def walk(self):
    26         print("is walking ...")
    27 
    28 b = BlackPerson("LiLei",30,"strong")
    29 
    30 w = WhitePerson("HanMei", 18)
    31 
    32 b.talk()
    33 w.talk()
    继承
  • 相关阅读:
    每日日报
    剑指 Offer 18. 删除链表的节点(LeetCode)
    java的访问权限
    java从键盘输入
    剑指 Offer 22. 链表中倒数第k个节点(快慢指针)(LeetCode)
    面试题 02.03. 删除中间节点(LeetCode)
    21. 合并两个有序链表(Leetcode)
    计算总线数据传输率
    时钟周期、总线周期(机器周期)区别
    书单(个人)
  • 原文地址:https://www.cnblogs.com/sshcy/p/8157217.html
Copyright © 2020-2023  润新知