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

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

    一、面向对象

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

    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()

    执行结果:

  • 相关阅读:
    Conversions
    Mispelling4
    A hard puzzle
    Easier Done Than Said?
    利用map可以对很大的数出现的次数进行记数
    A+B Coming
    结构体成员变量
    NSString 类介绍及用法
    复习回顾
    函数与方法对比
  • 原文地址:https://www.cnblogs.com/DXL123/p/10726522.html
Copyright © 2011-2022 走看看