zoukankan      html  css  js  c++  java
  • 面向对象学习总结

    面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

    ***、创建类与对象

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

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

     

    一、面向对象的三大特性:封装

    就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

    将内容封装到某处

    从某处调用被封装的内容

     

    (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间接调用被封装的内容

    class Foo:
    
        def __init__(self, name, age):
    
            self.name = name
    
            self.age = age
    
        def detail(self):
    
            print (obj1.name) # 直接调用对象的name属性
    
            print (obj1.age) # 直接调用对象的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()
    

      

    二、 面向对象的三大特性:继承

    将多个类共有方法提取到父类,子类仅需继承父类而不必一一实现每个方法

    注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不同而已。

     

    多继承呢?是否可以继承多个类?

    如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?

    1、Python的类可以继承多个类,Java和C#中则只能继承一个类

    2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是

     

    当类是经典类时,多继承情况下,会按照深度优先方式查找

    当类是新式类时,多继承情况下,会按照广度优先方式查找

    当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类

     

     

    三、 面向对象的三大特性:多态

    • 多态指的是一类事物有多种形态:动物有多种形态:人,狗,猪

    Pyhon不支持Java和C#这一类强类型语言中多态的写法,但是原生多态,其Python崇尚"鸭子类型"。

    Python崇尚鸭子类型,即'如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子'

    • python程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象
    • 也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。

    在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员:

    • _xxx:受保护成员,不能用'from module import *'导入;
    • __xxx__:系统定义的特殊成员;
    • __xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过"对象名._类名__xxx"这样的特殊方式来访问。
    • 一:我们定义的类的属性到底存到哪里了?有两种方式查看
    • dir(类名):查出的是一个名字列表
    • 类名.__dict__:查出的是一个字典,key为属性名,value为属性值
    • 二:特殊的类属性
    • 类名.__name__# 类的名字(字符串)
    • 类名.__doc__# 类的文档字符串
    • 类名.__base__# 类的第一个父类(在讲继承时会讲)
    • 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
    • 类名.__dict__# 类的字典属性
    • 类名.__module__# 类定义所在的模块
    • 类名.__class__# 实例对应的类(仅新式类中)

    3. __init__

    构造方法,通过类创建对象时,自动触发执行。

    4. __del__

      析构方法,当对象在内存中被释放时,自动触发执行。

    注:此方法一般无须定义,因为Python是一门高级语言,

  • 相关阅读:
    二维数组中的查找
    浅析Java的Object类
    Alan Turing的纪录片观后感
    近期学习docker遇到的一些问题
    eclipse(STS)安装jd-eclipse插件实现查看API源代码功能
    deepin配置Oracle JDK
    两个有序链表的合并
    Maven 项目中各包单独打成jar包
    一次性密码 && 身份认证三要素
    HTTPS工作流程
  • 原文地址:https://www.cnblogs.com/daydayup12138/p/10726770.html
Copyright © 2011-2022 走看看