Python 中类和实例的通俗讲解

Python中类-带括号与不带括号的区别(通俗易懂) 前言 通常有这个疑问应该是刚刚入门的python小白或者是已经在使用一些框架了但是基础薄弱的小伙伴(自己瞎想的····) 下面我们来详细解答 概述 首先类不带括号我们叫赋值,带括号我们叫实例化。 本文主要解决一下几个问题: 什么是赋值? 什么是实例化? 不带括号-赋值 带括号-实例化 什么是赋值? 来者皆客,先上杯茶(例子),你品,你细品: >>> a = 7 &... 阅读详情
这篇文章是我看到的讲解Python类与实例的文章中讲的比较通俗易懂的,因此我将其转载过来,供大家共同学习!
class Person:

注意,类的名称一般用大写字母开头,这是惯例。当然,如果故意不遵循此惯例,也未尝不可,但是,会给别人阅读乃至于自己以后阅读带来麻烦。既然大家都是靠右走的,你就别非要在路中间睡觉了。

接下来,一般都要编写构造函数,在写这个函数之前,先解释一下什么是构造函数。

class Person:
    def __init__(self, name, lang, website):
        self.name = name
        self.lang = lang
        self.website = website

上面的类中,首先呈现出来的是一个名为:init()的函数,注意,这个函数是以两个下划线开始,然后是init,最后以两个下划线结束。这是一个函数,就跟我们此前学习过的函数一样的函数。但是,这个函数又有点奇特,它的命名是用“__”开始和结束。

请看官在这里要明确一个基本概念,类就是一种对象类型,和跟前面学习过的数值、字符串、列表等等类型一样。比如这里构建的类名字叫做Person,那么就是我们要试图建立一种对象类型,这种类型被称之为Person,就如同有一种对象类型是list一样。

在构建Person类的时候,首先要做的就是对这种类型进行初始化,也就是要说明这种类型的基本结构,一旦这个类型的对象被调用了,第一件事情就是要运行这个类型的基本结构,也就是类Person的基本结构。就好比我们每个人,在头脑中都有关于“人”这样一个对象类型(对应着类),一旦遇到张三(张三是一个具体人),我们首先运行“人”这个类的基本结构:一个鼻子两只眼,鼻子下面一张嘴。如果张三符合这个基本机构,我们不会感到惊诧(不报错),如果张三不符合这个基本结构(比如三只眼睛),我们就会感到惊诧(报错了)。

由于类是我们自己构造的,那么基本结构也是我们自己手动构造的。在类中,基本结构是写在init()这个函数里面。故这个函数称为构造函数,担负着对类进行初始化的任务。

还是回到Person这个类,如果按照上面的代码,写好了,是不是init()就运行起来了呢?不是!这时候还没有看到张三呢,必须看到张三才能运行。所谓看到张三,看到张三这样一个具体的实实在在的人,此动作,在python中有一个术语,叫做实例化。当类Person实例化后立刻运行init()函数。
上面关于类的讲解很形象生动!

#!/usr/bin/env python
 #coding:utf-8

class Person:
     def __init__(self, name, lang, website):
         self.name = name
         self.lang = lang
         self.website = website

info = Person("qiwsir","python","qiwsir.github.io")     #实例化Person
 print "info.name=",info.name
 print "info.lang=",info.lang
 print "info.website=",info.website

#上面代码的运行结果:

info.name= qiwsir
 info.lang= python
 info.website= qiwsir.github.io

在上面的代码中,建立的类Person,构造函数申明了这个类的基本结构:name,lang,website。

注意观察:info=Person(“qiwsir”,”python”,”qiwsir.github.io”),这句话就是将类Person实例化了。也就是在内存中创建了一个对象,这个对象的类型是Person类型,这个Person类型是什么样子的呢?就是init()所构造的那样。在实例化时,必须通过参数传入具体的数据:name=”qiwsir”,lang=”python”,website=”qiwsir.github.io”。这样在内存中就存在了一个对象,这个对象的类型是Person,然后通过赋值语句,与变量info建立引用关系。请看官回忆以前已经讲述过的变量和对象的引用关系。

类和实例
•“类提供默认行为,是实例的工厂”,我觉得这句原话非常经典,一下道破了类和实例的关系。看上面代码,体会一下,是不是这个理?所谓工厂,就是可以用同一个模子做出很多具体的产品。类就是那个模子,实例就是具体的产品。所以,实例是程序处理的实际对象。
•类是由一些语句组成,但是实例,是通过调用类生成,每次调用一个类,就得到这个类的新的实例。
•对于类的:class Person,class是一个可执行的语句。如果执行,就得到了一个类对象,并且将这个类对象赋值给对象名(比如Person)。

self的作用

细心的看官可能注意到了,在构造函数中,第一个参数是self,但是在实例化的时候,似乎没有这个参数什么事儿,那么self是干什么的呢?

self是一个很神奇的参数。

在Person实例化的过程中,数据”qiwsir”,”python”,”qiwsir.github.io”通过构造函数(init())的参数已经存入到内存中,并且这些数据以Person类型的面貌存在组成一个对象,这个对象和变量info建立的引用关系。这个过程也可说成这些数据附加到一个实例上。这样就能够以:object.attribute的形式,在程序中任何地方调用某个数据,例如上面的程序中以info.name得到”qiwsir”这个数据。这种调用方式,在类和实例中经常使用,点号“.”后面的称之为类或者实例的属性。

这是在程序中,并且是在类的外面。如果在类的里面,想在某个地方使用传入的数据,怎么办?

随着学习的深入,看官会发现,在类内部,我们会写很多不同功能的函数,这些函数在类里面有另外一个名称,曰:方法。那么,通过类的构造函数中的参数传入的这些数据也想在各个方法中被使用,就需要在类中长久保存并能随时调用这些数据。为了解决这个问题,在类中,所有传入的数据都赋给一个变量,通常这个变量的名字是self。注意,这是习惯,而且是共识,所以,看官不要另外取别的名字了。

在构造函数中的第一个参数self,就是起到了这个作用——接收实例化过程中传入的所有数据,这些数据是通过构造函数后面的参数导入的。显然,self应该就是一个实例(准确说法是应用实例),因为它所对应的就是具体数据。

如果将上面的类增加两句,看看效果:

#!/usr/bin/env python
 #coding:utf-8

class Person:
     def __init__(self, name, lang, website):
         self.name = name
         self.lang = lang
         self.website = website

        print self          #打印,看看什么结果
        print type(self)

#运行结果
<__main__.Person instance at 0xb74a45cc>
 <type 'instance'>

证实了推理。self就是一个实例(准确说是实例的引用变量)。

self这个实例跟前面说的那个info所引用的实例对象一样,也有属性。那么,接下来就规定其属性和属性对应的数据。上面代码中:self.name = name,就是规定了self实例的一个属性,这个属性的名字也叫做name,这个属性的数据等于构造函数的参数name所导入的数据。注意,self.name中的name和构造函数的参数name没有任何关系,它们两个一样,只不过是一种起巧合(经常巧合),或者说是写代码的人懒惰,不想另外取名字而已,无他。当然,如果写成self.xxxooo = name,也是可以的。

其实,从效果的角度来理解,可能更简单一些,那就是类的实例info对应着self,info通过self导入实例属性的所有数据。

当然,self的属性数据,也不一定非得是由参数传入的,也可以在构造函数中自己设定。比如:

#!/usr/bin/env python
 #coding:utf-8

class Person:
     def __init__(self, name, lang, website):
         self.name = name
         self.lang = lang
         self.website = website
         self.email = "qiwsir@gmail.com"     #这个属性不是通过参数传入的

info = Person("qiwsir","python","qiwsir.github.io")
 print "info.name=",info.name
 print "info.lang=",info.lang
 print "info.website=",info.website
 print "info.email=",info.email      #info通过self建立实例,并导入实例属性数据

#运行结果

info.name= qiwsir
 info.lang= python
 info.website= qiwsir.github.io
 info.email= qiwsir@gmail.com    #打印结果

通过这个例子,其实让我们拓展了对self的认识,也就是它不仅仅是为了在类内部传递参数导入的数据,还能在构造函数中,通过self.attribute的方式,规定self实例对象的属性,这个属性也是类实例化对象的属性,即做为类通过构造函数初始化后所具有的属性。所以在实例info中,通过info.email同样能够得到该属性的数据。在这里,就可以把self形象地理解为“内外兼修”了。或者按照前面所提到的,将info和self对应起来,self主内,info主外。

其实,self的话题还没有结束,后面的方法中还会出现它。它真的神奇呀。

构造函数的参数

前面已经说过了,构造函数init就是一个函数,只不过长相有点古怪罢了。那么,函数中的操作在构造函数中依然可行。比如:

def __init__(self,*args):
     pass

这种类型的参数:*args和前面讲述函数参数一样,就不多说了。忘了的看官,请去复习。但是,self这个参数是必须的,因为它要来建立实例对象。

很多时候,并不是每次都要从外面传入数据,有时候会把构造函数的某些参数设置默认值,如果没有新的数据传入,就应用这些默认值。比如:

class Person:
     def __init__(self, name, lang="golang", website="www.google.com"):
         self.name = name
         self.lang = lang
         self.website = website
         self.email = "qiwsir@gmail.com"

laoqi = Person("LaoQi")     #导入一个数据name="LaoQi",其它默认值
info = Person("qiwsir",lang="python",website="qiwsir.github.io")    #全部重新导入数据

print "laoqi.name=",laoqi.name
 print "info.name=",info.name
 print "-------"
 print "laoqi.lang=",laoqi.lang
 print "info.lang=",info.lang
 print "-------"
 print "laoqi.website=",laoqi.website
 print "info.website=",info.website

#运行结果

laoqi.name= LaoQi
 info.name= qiwsir
 -------
 laoqi.lang= golang
 info.lang= python
 -------
 laoqi.website= www.google.com
 info.website= qiwsir.github.io

在这段代码中,看官首先要体会一下,“类是实例的工厂”这句话的含义,通过类Person生成了两个实例:laoqi、info

此外,在看函数赋值的情况,允许设置默认参数值。

至此,仅仅是初步构建了一个类的基本结构,完成了类的初始化。

【Python自动化测试13】类、对象、属性与方法知识讲解 一、前言   本文章主要讲解Python中异常介绍、捕获、处理相关知识点内容,为后续自动化测试框架搭建及日常维护做铺垫,下方有系列文章的传送门,感兴趣的小伙伴也可以前往查看,话不多说,让我们一起看看吧~ 阅读详情

相关推荐

从CCD数据上报看wxHOOK的封号风险与规避

本文深入分析了微信CCD数据上报机制对wxHOOK的检测逻辑与封号风险,揭示了调试器路径暴露、非白名单DLL加载和内存校验失败等关键风险点。通过实战案例和规避方案,帮助开发者理解如何安全使用wxHOOK技术,避免封号风险,包括内存镜像欺骗、内核级隐蔽和硬件辅助方案等高级技巧。

weixin_27875131的博客 627

CF1450 C1. Errich-Tac-Toe (Easy Version) C2. Errich-Tac-Toe (Hard Version)(构造)

链接 https://codeforces.com/contest/1450/problem/C2 The only difference between the easy and hard versions is that tokens of type O do not appear in the input of the easy version. Errichto gave Monogon the following challenge in order to intimidate him from

萧瑟的博客 6万+

PID控制器(位置式和增量式)

PID控制算法

zhinian_hao的博客 4512

Codeforces Global Round 12 C2. Errich-Tac-Toe (Hard Version)(思维)

题目描述 The only difference between the easy and hard versions is that tokens of type O do not appear in the input of the easy version. Errichto gave Monogon the following challenge in order to intimidate him from taking his top contributor spot on Codeforce

li_wen_zhuo的博客 12万+

STM32F103C8T6实战:手把手教你搭建智能火灾报警系统(附MQ-2传感器调试技巧)

本文详细介绍了基于STM32F103C8T6单片机和MQ-2烟雾传感器的智能火灾报警系统搭建过程。从硬件选型、电路设计到软件开发,提供全面的实战指导,特别包含MQ-2传感器调试技巧,帮助开发者快速实现稳定可靠的智能火灾监控系统。

year5的博客 213

玩转Docker | 使用Docker部署MediaCMS内容管理系统

玩转Docker | 使用Docker部署MediaCMS内容管理系统

qq_59334230的博客 2918

【Java】被围绕的区域(DFS)

题目描述 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 示例: X X X X X O O X X X O X X O X X 运行你的函数后,矩阵变为: X X X X X X X X X X X X X O X X 解题思路 DFS+递归寻找和边界联通的'O',其他的'O‘都...

ssjdoudou的博客 1万+

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1006

xxxooo

namespace xxoo { class ooxx { } } An h1 header Paragraphs are separated by a blank line. 2nd paragraph. Italic, bold, monospace. Itemized lists look like: this one that one the other one Note th...

weixin_30391339的博客 2万+

麒麟服务器操作系统QT系列软件工具手册

对Qt提供的开发工具进行了一系列的优化之后,在日常的修复bug和维护框架的过程中,桌面研发对Qt的基础软件库也进行了部分优化工作,包括qtbase、qtwayland、qtscript、qt4-x11等Qt基础组件,涉及的Qt框架版本主要涉及到5.9和5.12两个版本。qt 的翻译,是由 ts 文件生成 qm 文件然后进行翻译,国产操作系统上qt 的翻译是由单独的qttranslations包中进行维护,其次部分汉化问题也是qt组件维护工作的一部分,qt的翻译机制如图4-7所示。

太极淘的博客 543

利用autojs制作抢购支付宝消费劵的手机脚本

前期准备工作 1.打开支付宝,点击中间的抢消费券的广告 2.点击左上角,将抢购页面添加到首页 3.查看支付宝首页是否出现消费劵 . autojs代码 "auto"; functiontaskstart(){ sleep(1000); launchApp('支付宝'); toast("正在打开支付宝应用"); sleep(1000); varxf=textContains("消费").findOne().bounds(); ...

洛阳泰山的博客 1万+

python 类的使用

**# 创建实例 **说明:**关于类的这部分,我参考了《Learning Python》一书的讲解。 创建类 创建类的方法比较简单,如下: class Person: 注意,类的名称一般用大写字母开头,这是惯例。 接下来,一般都要编写构造函数,在写这个函数之前,先解释一下什么是构造函数。 class Person: def init(self, name, lang, website): sel...

hiekay的博客 2万+

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 403

【Python】Python 中类和实例的通俗讲解

本文为转载整理,我转过来作为备份留作自己查看,请点击链接阅读原文。原文链接为:点此 Python类与实例的讲解,相当通俗易懂。非常推荐! class Person: 注意,类的名称一般用大写字母开头,这是惯例。当然,如果故意不遵循此惯例,也未尝不可,但是,会给别人阅读乃至于自己以后阅读带来麻烦。既然大家都是靠右走的,你就别非要在路中间睡觉了。 接下来,一般都要编写构造...

李是李雅普诺夫的李的博客 585

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python中实例是什么_【Python】Python 中类和实例的通俗讲解

本文为转载整理,我转过来作为备份留作自己查看,请点击链接阅读原文。原文链接为:点此Python类与实例的讲解,相当通俗易懂。非常推荐!class Person:注意,类的名称一般用大写字母开头,这是惯例。当然,如果故意不遵循此惯例,也未尝不可,但是,会给别人阅读乃至于自己以后阅读带来麻烦。既然大家都是靠右走的,你就别非要在路中间睡觉了。接下来,一般都要编写构造函数,在写这个函数之前,先解释一下什么...

weixin_39825045的博客 1635

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解

Python中类、对象、方法、函数和属性的区别和理解前言一、类、对象、方法、函数和属性的区别和理解二、一个类的简单案例和对各种概念的理解 欢迎学习交流: zengf.hou@bit.edu.cn 前言 相信很多刚刚初学 python 的朋友几乎都会被类、对象、方法、函数和属性等概念搞得云里雾里,如果没有人点播,其实理解这些概念还是会有些困难的,下面笔者把自己对这几个概念的理解分享给大家,希望对初学者有所帮助! 一、类、对象、方法、函数和属性的区别和理解 类: 采用 Class 作为关键字进行定义的代码块,

Zephyr Hou 的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

如何最简单、通俗地理解Python的面向对象?

在现实生活中,我们经常会遇到各种事物,例如汽车。每一辆汽车都有特定的属性(如品牌、颜色、型号等),以及一些行为(如启动、加速、刹车等)。如果我们想用计算机程序来模拟汽车,就可以使用面向对象的思想。就像创建一个“汽车”模板,然后根据这个模板生成具体的汽车实例,每个实例有自己的属性值,并能执行相同的行为操作。class Car:print(f"print(f"print(f"在这个例子中,Car类就是我们定义的“汽车模板”。其中__init__方法是构造函数,用于初始化新创建的对象;而start。

cda2024的博客 882

Python类和对象:从青铜到王者的通关秘籍(附超实用避坑指南)

def mix(): # 错误!缺少selfprint("混合中...")调用时会报(记住实例方法第一个参数永远是self!

mahaimanyouzhe的博客 977

Python 面向对象编程基础

活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法。 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalizat...

weixin_30492047的博客 113

AI闪电战:代码+实战 从Python速通到深度学习|面向对象

《AI闪电战:代码+实战 从Python速通到深度学习》系列博客为有编程经验的学习者提供快速入门路径。遵循奥卡姆剃刀原则,博客讲解最必须的内容,助读者在最短时间内掌握核心技能并应用于实际项目。涵盖从Python基础到深度学习的各方面,包括数据处理、机器学习、深度学习基础、计算机视觉和自然语言处理。每篇博客配有详细的代码注释和实战练习。

m0_46573428的博客 1257

python 中 Class(类)的详细说明,通俗易懂

通俗易懂的说明了python中有关Class的使用

qq_51409113的博客 2万+

Python 元类和父类的区别及通俗理解

Python 元类和父类的通俗理解Python元类之难通俗理解图示图示说明从代码层面理解参考 Python元类之难 Python的元类可以说是Python中最难理解的知识点,一开始看了各种文章,还是理解不好。 容易与类的继承(父类)混淆。 稍微有点编程基础的人,相信都对父类有所理解,但是究竟什么是元类,为什么要用元类,有什么好处,有了父类为什么还要元类干嘛。 下面我是个人的一些通俗理解,如果有不对的地点,请指正。 通俗理解 相信大家都有去五金店打过钥匙的经历,我们要参照原来的钥匙(模具),再打造一把新的

czx840624424的博客 1759

【Python高级编程】类和实例化

【Python高级编程】类和实例化

AIxiaoyun001的博客 1491

通俗易懂理解类与对象

教程目录:大话编程目录 更好的文章组织结构: Github 关注公众号:tuduisuinian(土堆碎念),菜单底部可以获取教程PDF文档 什么是类,什么是对象? 自己瞎编的故事来定性了解下(以下故事纯属虚构) 1.在汽车制造行业,有一家机构,这家机构是专门用来制定一些汽车规范的。它会规定:汽车应该有四个圆的轮子,应该可以跑到100km/h,应该配备天窗等等。然后,这家机构将这些规范整理...

子翊寒 1444

python中实例化对象的通俗理解_如何最简单、通俗地理解Python的类?

目录:一、笔记二、我的自学路线三、笔记目录一、笔记1) 类的构成① 类由三个部分构成:1. 类名称:类型。2. 类属性:对象的属性。3. 类方法:对象的方法。② 创建和使用类,类定义形式(代码):class 类名:属性列表:方法列表:③ 类是对象的类型,具有相同属性和行为事物的统称。类是抽象的,在使用的时候通常会找到这个类的一个具体存在。# 定义类class People:# 类属性sex = '...

weixin_39689506的博客 1359
下一篇: Python中super()方法的使用
Four_Infinite
博客等级 码龄10年 47粉丝 14原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值