zoukankan      html  css  js  c++  java
  • python-面向对象(一)——开篇基础

    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)

     

    一、创建类和对象

    面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

      类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

      对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

    • class是关键字,表示类
    • 创建对象,类名称后加括号即可

     

    二、面向对象三大特性

    面向对象的三大特性是指:

    • 封装
    • 继承
    • 多态

     

    封装:

     
    第一步  将内容封装到某处
     
    对象中封装了初始化__init__函数下面的变量,还有隐含地指向类的一个类对象指针,把类和对象关联起来。对象通过这个指针来寻找类下面的方法。当执行类下面的方法时,类的方法在去封装在类下面的变量中找需要的变量。
     
    第二步  从某处调用被封装的内容
     

    调用被封装的内容时,有两种情况:

    • 通过对象直接调用
    • 通过self间接调用
     
    1、通过对象直接调用被封装的内容
     
    class Foo:
     
        def __init__(self, name, age):
            self.name = name
            self.age = age
     
    obj1 = Foo('wupeiqi', 18)
    print obj1.name    # 直接调用obj1对象的name属性
    print obj1.age     # 直接调用obj1对象的age属性
     
    obj2 = Foo('alex', 73)
    print obj2.name    # 直接调用obj2对象的name属性
    print obj2.age     # 直接调用obj2对象的age属性
     
    2、通过self间接调用被封装的内容

    执行类中的方法时,需要通过self间接调用被封装的内容
     
    class Foo:
      
        def __init__(self, name, age):
            self.name = name
            self.age = age
      
        def detail(self):
            print self.name
            print self.age
      
    obj1 = Foo('wupeiqi', 18)
    obj1.detail()  
    # Python默认会将obj1传给self参数,即obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18
      
    obj2 = Foo('alex', 73)
    obj2.detail()  
    # Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 alex ; self.age 是 78
     
    综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。

     

    继承

    • 经典类    深度优先
    • 新式类    广度优先  就近原则    前提:如 A多继承 B,C  在B,C都继承了D时 这个规律才有效 ,否则新式类就会先去执行D里面的方法
    java、c# 不支持多继承 一个类只能继承一个类

    经典类  class:

    class D:
        def obj(self):
            print "This is obj :D"
    class C(D):
        def obj(self):
            print  "This is obj :C"
    class B(D):
        pass
    class A(B,C):
        pass
    
    a = A()
    a.obj()
    
    
    =========================
    
    This is obj :D
    

     

    新式类  class(object):  就近原则

    class D(object):
        def obj(self):
            print "This is obj :D"
    class C(D):
        def obj(self):
            print  "This is obj :C"
    class B(D):
        pass
    class A(B,C):
        pass
    
    a = A()
    a.obj()
    
    ========================
    
    This is obj :C

     

     

    多态

    Pyhon不支持多态并且也用不到多态,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

     

  • 相关阅读:
    调度思想-现实中的事物与技术里面其实存在类似道理(转载收藏的一篇好文)
    使用curl发送post或者get数据
    论技术的重要性(转载的一篇文章)
    facebook工具xhprof的安装与使用-分析php执行性能(转载)
    (转载)网站瓶颈发现和解决
    mysql不乱码的思想总结
    如何在同一台机器上安装多个MySQL的实例
    awk的常用操作场景以及工作中涉及到的一些场景实例
    Linux中的yum的配置以及常见报错的处理
    (转载)感触比较深的一篇文章
  • 原文地址:https://www.cnblogs.com/chenchao1990/p/5377468.html
Copyright © 2011-2022 走看看