• python语言系统学习(四)


    一、面向对象编程。

    抽象出一个类对象:

     根据类对象创建实例对象。(将某个类对象赋值给某个实例对象)

    dog = Dog("拉布拉多","旺财","3","很好")

    通过实例对象,访问属性和方法。dog.breed  dog.run()

    规则:每个单词的首字母大写,其余字母全部小写。

         为了在创建实例后对其进行初始化(给实例对象绑定一些属性),需要创建名为__init__( )创建实例对象后就会自动调用这些特殊方法。指的是创建类对象会自动调用所有以双下滑线开头的方法,还是指的是只调用__init( )__方法,这个地方没看明白????。应该是只调用了init( )。

    方法和函数的区别:

    方法就是定义在类对象中的函数。

    1.定义方法时,方法的第一个形参表示调用该方法的实例对象,第一个形参的名称通常是self

    2.调用方法的时候,系统自动将调用该方法的实例对象作为实参传递给第一个形参。

    如果没有定义__init__,或者定义了__init__,但是没有定义除self以外的形参,那么根据类对象创建实例对象时就不需要传入实参。

    如果在类对象在中定义了特殊的方法__init__,那么对于"类名([实参])",会执行两大步:

    1.创建实例对象

    2.自动调用创建的实例对象的特殊方法__init()__(创建的实例对象会作为实参被自动传递给特殊方法__init__的第一个形参self)

    3-5 实例属性

    实例属性指的是实例对象所绑定的属性。绑定实例属性的方式有两种:

    1.在类对象的内部(方法中)

     语法格式: self.属性名 = 属性值

    2.在类对象的外部

    python是动态语言,所以,在实例对象创建之后,可以对其动态地绑定属性。

    语法格式:实例对象.属性名 = 属性值

    访问实例属性的方式有两种:

    1.在类对象的内部(方法中)     语法格式: self.属性名

    2.在类对象的外部    实例对象.属性名

    3-6 实例属性下

    特殊方法,可以使用__dict__查看某个实例对象绑定的所有属性和方法的字典。给一个对象绑定的实例属性对另一个对象是不起作用的。

    3-7 类属性

    绑定类属性(给类对象绑定属性)的方式有两种:

    1.在类对象的内部(方法外) 语法格式:属性名 = 属性值

    2.在类对象的外部: python是动态语言,所以,在类对象创建以后,可以对其动态的绑定属性。 语法格式:类对象.属性名 = 属性值

    访问类属性的方式有两种:

    1.在类对象的内部(方法中)     语法格式: 类对象.属性名

    2.在类对象的外部    类对象.属性名 或:实例对象.属性名

    类对象的所有实例对象都有一个指向类对象的指针,所以,类对象的所有实例对象都可以访问类属性。

    总结:

    3-8和3-12省略

    3-10 实例方法

    3-12 类方法

    类方法必须用装饰器@classmethod进行修饰

    在类方法的外部,分别通过类对象和实例对象访问类方法。

     实例对象里有指向类对象的指针

    3-13 静态方法

    在类对象中定义静态方法时,必须使用装饰器@staticmethod进行装饰。静态方法只是一个普通函数。

    第一个形参没有特殊的含义和要求。

    3-14 访问控制

    指的是控制类对象的属性和方法在类对象的外部是否可以直接访问。

    如果在类对象的属性或者方法前添加两个下划线__,那么在类对象的外部就不能直接访问该属性或方法了。

     仍然可以在类对象的外部动态绑定名为__XXX的属性或方法,这与类对象内部名为__XXX的属性或方法是不同的。

    也可以在类对象的内部定义以单下划线开头的属性和方法,表示在类对象的外部可以访问,但是最好不要访问。

    3-15 封装

    封装 继承 和 多态 是面向对象编程的三大特征。

    封装:1、把数据(属性)和行为(方法)包装到类对象中。在类对象的外部调用方法,就无须关心一个方法的实现细节。/2.。

    2、在类对象的内部通过访问控制把某些属性和方法隐藏起来,不允许在类对象的外部直接访问。而是在类对象的内部对外提供公开的接口方法。(例如戈getter和setter)

     3-16 继承

    直接把类定义时,括号里的object替换为需要继承的类即可。继承的主要作用是实现代码复用。

    单继承:只有一个父类

    多继承:多个父类

    子类会继承所有父类的属性和方法。

    3-18 重写

    当父类中的某个方法被重写之后,通过子类或其实例对象调用,只能调用重写后的方法。若在子类重写的方法中想调用父类的方法,可以用super调用。

    3-19 多态

    简单的说,就是“具有多种形态”,他指的是:即便不知道一个变量所引用的对象是什么类型,仍然可以通过这个变量调用方法,在运行的过程中根据变量所引用对象的类型,动态的决定调用哪个对象中的方法。

    python是一门动态语言,在调用时不会检查参数类型。而java是静态语言。实现多态的条件比动态语言严格很多。

    动态语言的多态崇尚“鸭子类型”,即这个对象的行为像鸭子,我们就可以把它看做鸭子类型,即在下面的程序中,我们并不关心f函数中的parent的具体类型,我们只关心parent这个对象中是否有do_sth()这个函数。

    3-20 MRO

    MRO的全称是Method Resolution Order(方法解析顺序),它指的是一颗类继承树,当调用最底层类对象所对应实例对象的方法时,Python解释器

    在类继承树上搜索方法的顺序。对于一颗类继承树,可以调用最底层类对象的方法mro()或访问最底层类对象的特殊属性__mro__,获得这颗类继承树的MRO。

    mro函数和属性值的输出结果,代表了这一颗类继承树的搜索顺序。

     

  • 相关阅读:
    ES7 cat API的小结
    zabbix5.0 使用elasticsearch7.6按日期索引存储历史数据
    Archlinux爬坑指南
    ArchLinux安装常用软件QQ、TIM、微信等常用软件(三)
    ArcnLinux安装KDE桌面环境(二)
    ArchLinux安装步骤(一)
    DDD领域驱动及落地方案
    Text Classification with Keras
    Mattermost Server安装及配置AD/LADP
    使用队列问题
  • 原文地址:https://www.cnblogs.com/maowuyu-xb/p/12195681.html
Copyright © 2020-2023  润新知