Python面向对象程序设计之类和对象、实例变量、类变量用法分析

作者:随风行云 时间:2021-05-08 01:34:56 

本文实例讲述了Python面向对象程序设计之类和对象、实例变量、类变量用法。分享给大家供大家参考,具体如下:


类和对象:

  • 类的定义:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

  • 类的优势:将一个对象的功能集中于一体,便于操作,降低了代码的重复。

  • 实例化:创建一个类的实例,类的具体对象。

  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

使用 class 语句来创建一个新类:


class Dog:
 #self 代表的是类的实例,代表当前对象的地址
 def __init__(self,name):##称为类的构造函数,进行初始化成员变量
   self.name=name
 def bulk(self):###自定义函数
   print("%s:汪汪!"%self.name)

d1=Dog("奥巴马")##创建对象,传入__init__所需的变量,self默认自动传入

d1.bulk()#调用方法
print(d1)

为什么要有self:

以类变量和实例变量为解释,对于共有属性,一般会在共有部分定义,不需要__init__,而比如说因为人人都有自己的名字,那么名字应该是一个人私有的。而类的函数由于为了节约资源,并不会拷贝给每一个对象,每一个对象都要从类的定义区中调用方法,对于涉及对象特有属性的方法,调用方法的时候必须传入自身对象self才能使函数获得私有的数据,而调用这个私有的数据使用”self.变量名”.

Python面向对象程序设计之类和对象、实例变量、类变量用法分析

附:

什么是新式类:https://www.jb51.net/article/183280.htm


实例变量和类变量:

  • 实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的数据

  • 变量使用的顺序是:实例变量--》类变量,如果实例变量中没有才会去类变量中找

  • 但即使是类中的变量,也是需要使用self.变量名来使用


class Dog:
 age=8
 def __init__(self,name):
   self.name=name
 def bulk(self):
   print("汪汪")

d1=Dog("包子")
d2=Dog("馒头")
d1.age=10
print("Dog:",Dog.age,"\tD1:",d1.age,"\tD2:",d2.age)

-------------------------
结果:
Dog: 8   D1: 10   D2: 8
  • 节约论:python为了简洁性,不会复制一份类的数据给每一个对象,每一个对象之后存有其特有的属性,当其需要使用属性或方法时,先看自己有没有,如果没有再去类中找


类变量的创建:

  • 可以在声明类的时候定义

Python面向对象程序设计之类和对象、实例变量、类变量用法分析

  • 也可以使用赋值来定义:

Python面向对象程序设计之类和对象、实例变量、类变量用法分析

Python面向对象程序设计之类和对象、实例变量、类变量用法分析


实例变量的创建:

  • 可以在__init__中定义

Python面向对象程序设计之类和对象、实例变量、类变量用法分析

  • 也可以使用赋值来定义:

Python面向对象程序设计之类和对象、实例变量、类变量用法分析

希望本文所述对大家Python程序设计有所帮助。

来源:https://www.cnblogs.com/progor/p/8419345.html

标签:Python,类和对象,实例变量,类变量
0
投稿

猜你喜欢

  • 八条常见的CSS错误及修复方法

    2010-04-08 16:54:00
  • PHP与Web页面交互操作实例分析

    2023-09-05 14:43:16
  • 如何在SQL2000的查询中使用XML-Data?

    2010-06-18 19:26:00
  • Python利用fastapi实现上传文件

    2023-12-09 05:54:40
  • JavaScript的陷阱

    2008-10-28 19:52:00
  • 超越MYSQL,ACCESS复合承载

    2008-12-09 13:31:00
  • PHP导出数据超时的优化建议

    2023-06-29 18:36:32
  • Python中利用ItsDangerous快捷实现数据加密

    2022-06-09 23:24:41
  • MySQL 5数据库连接超时问题

    2009-12-29 10:23:00
  • Laravel框架实现点播上传阿里云功能

    2023-06-13 20:13:30
  • 统一的品牌设计

    2008-08-07 12:53:00
  • AspJpeg 2.0组件使用教程(GIF篇)

    2008-12-16 19:37:00
  • asp代码WinHttp.WinHttpRequest.5.1使用例子

    2010-03-11 21:28:00
  • 逐步讲解向Access数据库上传且显示图片

    2008-11-28 16:51:00
  • javascript面向对象技术基础(四)

    2010-02-07 13:15:00
  • MySQL表设计优化与索引 (十)

    2010-10-25 19:51:00
  • Oracle存储过程基本语法介绍

    2023-06-27 14:00:26
  • 输入法下keyup失效的解决方案

    2007-11-01 12:57:00
  • asp.net微信开发(永久素材管理)

    2023-07-21 13:02:45
  • js全选/全不选/反选 checkbox代码

    2008-03-18 13:00:00
  • asp之家 网络编程 m.aspxhome.com