面向对象总结

类和对象是面向对象中的两个重要概念。
类:是对事物的抽象,比如汽车模型。
对象:是类的一个实例,比如:大卡车。
二者之间的联系:类是把对象抽象化,对象是把类实例化。这个有点像哲学上上的个体和整体。当然个体还可以继续细分,这种就是一种分而治之和分类思想。

一、面向对象

三大特性:封装、继承和多态

1、封装

概念:封装就是讲内容封装到某个地方,以后再去调用被封装在某处的内容

所以,在使用面向对象的封装特性时,需要:

  • 将内容封装到某处(可以被封装的内容有哪些)
  • 从某处调用被封装的内容(如果在多层封装中找到指定的方法并调用

 2、继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

例如:

  猫:喵喵叫、吃、喝、拉、撒

  狗:汪汪叫、吃、喝、拉、撒

3、多态

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

二、类

1. Python中类的定义、结构、创建

1 使用class关键字定义一个类,并且类名首字母要大写;
2 创建的类型不能用简单类型表示时就需要创建类;
3 类把需要的变量和函数组合,这种包含也称之为“封装”

2. Python类的结构

1 Class 类名:
2     成员变量(属性)
3     成员函数(方法)

3. 类的创建

1 class MyClass():
2     def fun(self): # self 是必须的
3         print('I am ***") 

4.   类的属性

类由属性和方法组成,类的属性是对数据的封装,类的方法则是对类的行为的封装。类的属性按使用范围分为公有属性和私有属性,类的属性范围取决于属性的名称。
公有属性:类中和类外都可以调用的属性
私有属性:不能被类以外的函数调用,只能通过类的内部方法调用。(其实也可以通过instance.classname__attribute方式访问,但只用于调试程序)。定义方式:以"–"双下划线开始的成员变量就是私有属性,否则是共有属性。
内置属性:由系统在定义类的时候默认添加的,由前后两个下划线构成

5. 定义类的方法

和函数定义一样,但需要self作为第一个参数。
类的方法也分为:公有方法和私有方法。
公有方法:只有实例化之后才能被调用。
私有方法:不能被外部的类和方法调用,私有方法的定义和私有属性定义都是一样的,在方法前面加上’__'双下划线就可以了;
类方法:被classmethod()函数处理过的函数,能被类所直接调用,也能被对象所调用(是继承关系)
静态方法:相当于"全局函数",可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义静态方法没有"self"语句;
self参数:用于区分函数和类的方法(必须有一个self),self参数表示指向对象本身。


简单阐述一下划线开头变量的特点:

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

|  _xxx:这样的对象叫做保护变量,不能用'from module import *'导入,只有类对象和子类对象能访问这些变量;

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

|||  __xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。Python中没有纯粹的C++意义上的私有成员。

实例

三维向量的类:

代码如下1:

class xiangliang3:
    def __init__(self, x=0, y=0, z=0):
        self.X = x
        self.Y = y
        self.Z = z
    def __add__(self, n):
        r = xiangliang3()
        r.X = self.X + n.X
        r.Y = self.Y + n.Y
        r.Z = self.Z + n.Z
        return r
    def __sub__(self, n):
        r = xiangliang3()
        r.X = self.X - n.X
        r.Y = self.Y - n.Y
        r.Z = self.Z - n.Z
        return r
    def __mul__(self, n):
        r = xiangliang3()
        r.X = self.X * n
        r.Y = self.Y * n
        r.Z = self.Z * n
        return r
    def __truediv__(self, n):
        r = xiangliang3()
        r.X = self.X / n
        r.Y = self.Y / n
        r.Z = self.Z / n
        return r
    def __floordiv__(self, n):
        r = xiangliang3()
        r.X = self.X // n
        r.Y = self.Y // n
        r.Z = self.Z // n
        return r
    def show(self):
        print((self.X,self.Y,self.Z))
v1 = xiangliang3(1,2,3)
v2 = xiangliang3(4,5,6)
v3 = v1+v2
v3.show()
v4 = v1-v2
v4.show()
v5 = v1*3
v5.show()
v6 = v1/2
v6.show()

执行结果:

原文地址:https://www.cnblogs.com/DXL123/p/10726522.html