博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3基础之七【面向对象】
阅读量:4579 次
发布时间:2019-06-08

本文共 5785 字,大约阅读时间需要 19 分钟。

一: 面向对象

python是一门面向对象编程的语言

1:面向对象技术简介

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

2:类的定义

  • 基本格式如下:

    class ClassName:  # class 类的标识符  ClassNmme  类的名称      
    # 类的语句 . .

    在这里插入图片描述

3:类的对象

  • 类对象的操作

    类对象支持两种操作:属性引用和实例化。

    InstanceName=ClassName()  # 类的实例化  InstanceName.AttributeName # 类的属性引用

    在这里插入图片描述- 类的构造方法

    类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用

    class User:  userName = 'wanggang'  userID='001'  def __init__(self,author): # 类的构造方法,当类实例化时会调用该方法,该方法可以携带参数      self.userName='lisi'      self.author=author # 将参数赋值给self.author  def Score(self,ChineseScore,MathScore):      return self.author+"创作得分"+str(ChineseScore+MathScore)  user = User('苏轼'); # 类实例化时会自动调用类的构造方法  print(user.userName) # 访问类的属性 --属性引用  print(user.Score(80,80)) # 访问类的方法 --属性引用

    在这里插入图片描述

4:self

  • 类的方法与普通的函数只有一个区别
    • 类的方法必须有一个特别的参数self,self代表类的实例,不是类本身

      class User:      userName = 'wanggang'      userID='001'      def __init__(self, author):  # 类的构造方法,当类实例化时会调用该方法,该方法可以携带参数          self.userName='lisi'          self.author=author # 将参数赋值给self.author      def Score(self,ChineseScore,MathScore): # self代表类的实例          return self.author+"创作得分"+str(ChineseScore+MathScore) # self.author 代表类的实例参数author  user = User('苏轼'); # 类实例化时会自动调用类的构造方法  print(user.Score(80,80))

      在这里插入图片描述

5:类的方法

  • 类的方法用def 定义

  • 类的方法必须要self参数,且为第一个参数

  • self参数表示类的实例

    class User:      # 定义类的属性      userName = 'wanggang'      userID='001'      # 定义类的方法      def Score(self,ChineseScore,MathScore): # self代表类的实例          return self.author+"创作得分"+str(ChineseScore+MathScore) # self.author 代表类的实例参数author
  • 方法重写

    class User:      # 定义类的属性      userName = 'wanggang'      userID='001'      def __init__(self, author):  # 类的构造方法,当类实例化时会调用该方法,该方法可以携带参数          self.userName='lisi'          self.author=author # 将参数赋值给self.author      def score(self,ChineseScore,MathScore): # self代表类的实例          return self.author+"创作得分"+str(ChineseScore+MathScore) # self.author 代表类的实例参数author  class ZUser(User):  # 类的继承      # 重写父类score方法      def score(self,ChineseScore,MathScore,English):          # 子类继承父类,默认继承了父类的初始化方法          return self.author + "创作得分" + str(ChineseScore + MathScore+English)  user = User('苏轼'); # 类实例化时会自动调用类的构造方法  print(user.score(80,80))  zuser = ZUser("苏轼");  print(zuser.score(30,4,2))

    在这里插入图片描述

  • 私有方法

    __privateMethod:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__privateMmethods

    class User:      # 定义类的属性      userName = 'wanggang'      userID='001'      def __init__(self, author):  # 类的构造方法,当类实例化时会调用该方法,该方法可以携带参数          self.userName='lisi'          self.author=author # 将参数赋值给self.author      def __document(self): # 定义一个私有方法,以双下划线开头的方法,私有方法只能在类内部引用,不能在外部引用          return "这是一个user类"      def score(self,ChineseScore,MathScore): # self代表类的实例          # 调用类的私有方法self.__document()          return self.__document()+self.author+"创作得分"+str(ChineseScore+MathScore) # self.author 代表类的实例参数author  class ZUser(User):  # 类的继承      # 重新父类score方法      def score(self,ChineseScore,MathScore,English):          # 子类继承父类,默认继承了父类的初始化方法          return self.author + "创作得分" + str(ChineseScore + MathScore+English)  user = User('苏轼'); # 类实例化时会自动调用类的构造方法  print(user.score(80,80))  # print(user.__documet()) # 调用会报错  zuser = ZUser("苏轼");  print(zuser.score(30,4,2))

    在这里插入图片描述

6:类的继承

  • 类的继承

    class DerivedClassName(BaseClassName1):  # 类的继承      
    . . .
  • 多继承

    class DerivedClassName(Base1, Base2, Base3): # 类的多继承      
    . . .

7:类属性

  • 类的公有属性
  • 类的私有属性
    • __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs
  • 类的公有方法
  • 类的静态方法
    • 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。
  • 类方法
    • 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器。
  • 类的私有方法
    • __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods

      class User:      # 定义类的属性--公有属性      userName = 'wanggang'      userID='001'      # 定义类的属性--私有属性      __age = 20      __addr = 'xxxxx'      # 定义类的初始化方法      def __init__(self, author):          self.userName='lisi'          self.author=author # 将参数赋值给self.author      # 定义类的静态方法,直接使用类名.方法名调用、可以不用参数      @staticmethod      def school():          return '第一中学'      # 定义类方法,默认有个cls参数,可以被对象和类调用      @classmethod      def classMessage(cls):          return "这是一个类方法"      # 定义类的私有化方法      def __document(self): # 定义一个私有方法,以双下划线开头的方法,私有方法只能在类内部引用,不能在外部引用          return "这是一个user类"      # 定义类的方法      def score(self,ChineseScore,MathScore): # self代表类的实例          # 调用类的私有方法self.__document()          return self.__document()+self.author+"创作得分"+str(ChineseScore+MathScore) # self.author 代表类的实例参数author  user = User('苏轼'); # 类实例化时会自动调用类的构造方法  print(user.score(80,80))  print(user.school()) # 对象调用类的静态方法  print(User.school()) # 类名调用类的静态方法  print(user.classMessage()) # 对象调用类方法  print(User.classMessage()) # 类名调用类方法

      在这里插入图片描述

    • 类的专有方法

      __init__ : 构造函数,在生成对象时调用 __del__ : 析构函数,释放对象时使用 __repr__ : 打印,转换 __setitem__ : 按照索引赋值 __getitem__: 按照索引获取值 __len__: 获得长度 __cmp__: 比较运算 __call__: 函数调用 __add__: 加运算 __sub__: 减运算 __mul__: 乘运算 __truediv__: 除运算 __mod__: 求余运算 __pow__: 乘方

7:运算符重载

  • Python同样支持运算符重载,我们可以对类的专有方法进行重载,实例如下:

    class Vector:      def __init__(self, a, b):          self.a = a          self.b = b      def __str__(self):          return 'Vector (%d, %d)' % (self.a, self.b)      def __add__(self, other):          return Vector(self.a + other.a, self.b + other.b)  v1 = Vector(2, 10)  v2 = Vector(5, -2)  print(v1 + v2)

    在这里插入图片描述

转载地址:http://kaqms.baihongyu.com/

你可能感兴趣的文章
python程序设计教程胡建华_Python程序设计教程
查看>>
mac php-frm xampp_如何在Mac中使用shell_exec xampp php
查看>>
axure 导入元件库显示不出白框_猿型库:Axure小练习之自定义下拉框
查看>>
两个集合相减怎么算_你家使用的防火窗(耐火窗)质量合格吗?怎么判断好坏呢?...
查看>>
ue4加载本地图片_UE4引擎初始化原理详细讲解
查看>>
python整数作为条件_Python整数类型(int)详解
查看>>
pta简单实现x的n次方_c语言第二次作业pta..docx
查看>>
【Entity Framework】Model First Approach
查看>>
C# DataTable删除行Delete与Remove的问题
查看>>
HDU2586How far away? LCA
查看>>
网络流 - 最大流
查看>>
随手记note(记事簿)
查看>>
JRE System Library 与Java EE Libraries的区别
查看>>
颜色分类函数
查看>>
Oracle数据泵详解
查看>>
(中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
查看>>
sort-归并排序
查看>>
django 快速实现完整登录系统(cookie)
查看>>
.NET中的out和ref关键字
查看>>
Python之ftp服务器
查看>>