zoukankan      html  css  js  c++  java
  • 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函数和属性值的输出结果,代表了这一颗类继承树的搜索顺序。

     

  • 相关阅读:
    读书笔记——吴军《态度》
    JZYZOJ1237 教授的测试 dfs
    NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论
    [JZYZOJ 1288][洛谷 1005] NOIP2007 矩阵取数 dp 高精度
    POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
    POJ2157 Check the difficulty of problems 概率DP
    HDU3853 LOOPS 期望DP 简单
    Codeforces 148D. Bag of mice 概率dp
    POJ3071 Football 概率DP 简单
    HDU4405 Aeroplane chess 飞行棋 期望dp 简单
  • 原文地址:https://www.cnblogs.com/maowuyu-xb/p/12195681.html
Copyright © 2011-2022 走看看