面向对象的总结

面向对象

类:具有相同特征的一类事物(人、狗、老虎)

对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)

实例化:类——>对象的过程

一、创建类与对象:

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

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

 

 3)self参数

在Python中,在类中定义实例方法时将第一个参数定义为“self”只是一个习惯,而实际上类的实例方法中第一个参数的名字是可以变化的,而不必须使用“self”这个名字,尽管如此,建议编写代码时仍以self作为方法的第一个参数名字。

二、面向对象的三大特征

1、封装

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

 

2、继承

     是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构。抽象只是分析和设计的过程中,一个动作或者说一种技巧,通过抽象可以得到类

 

 

 

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

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

 

 3、多态

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

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

Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’ python程序员通常根据这种行为来编写程序。

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

三、类的成员

类的成员可以分为三大类:字段、方法和属性类

 

 1、方法

(1)方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

(2)普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;

(3)类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;

(4)静态方法:由类调用;无默认参数;

(5)在类中定义的方法可以粗略分为四大类:公有方法、私有方法、静态方法和类方法。

公有方法、私有方法都属于对象,私有方法的名字以两个下划线“__”开始,每个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和对象的成员;

公有方法通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对象的方法中通过self调用或在外部通过Python支持的特殊方式来调用。

如果通过类名来调用属于对象的公有方法,需要显式为该方法的self参数传递一个对象名,用来明确指定访问哪个对象的数据成员。

 

类成员的修饰符:

(1)公有成员,在任何地方都能访问

(2)私有成员,只有在类的内部才能方法

class C:

    name = "公有静态字段“

    __ name = "私有静态字段"

    def __init__(self):

        self.name = '公有字段'

        self.__foo = "私有字段"

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

        _xxx:受保护成员,不能用'from module import *'导入;

        __xxx__:系统定义的特殊成员;

        __xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。

注意:Python中不存在严格意义上的私有成员。

私有成员与公有成员

1)Python并没有对私有成员提供严格的访问保护机制。

          在定义类的成员时,如果成员名以两个下划线“__”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员。

          私有成员在类的外部不能直接访问,需要通过调用对象的公开成员方法来访问,也可以通过Python支持的特殊方式来访问。

2)公开成员既可以在类的内部进行访问,也可以在外部程序中使用。

3)在IDLE环境中,在对象或类名后面加上一个圆点“.”,稍等一秒钟则会自动列出其所有公开成员,模块也具有同样的用法。

4)如果在圆点“.”后面再加一个下划线,则会列出该对象、类或模块的所有成员,包括私有成员。

posted @ 2020-05-21 14:33  木彳  阅读(165)  评论(0编辑  收藏  举报