zoukankan      html  css  js  c++  java
  • 面象对象 基础篇

    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()
    继承
  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/sshcy/p/8157217.html
Copyright © 2011-2022 走看看