关于def __init__(self)的一些知识点

2023-05-16

转载自:https://zhuanlan.zhihu.com/p/55237543

关于def __init__(self)的一些知识点

胖二十斤等189人

胖二十斤等189人

def __init__(self)在Python里面很常见,

Python中的self

在Python中的类Class的代码中,常看到函数中的第一个参数,都是self。以及Class中的函数里面,访问对应的变量(读取或者写入),以及调用对应的函数时,经常有以下代码:

self.valueName
valueName:表示self对象,即实例的变量。与其他的,Class的变量,全局的变量,局部的变量,是相对应的。

self.function()
function:表示是调用的是self对象,即实例的函数。与其他的全局的函数,是相对应的。

  • Python中为何要有self

在类的代码(函数)中,需要访问当前的实例中的变量和函数的,即,访问Instance中的:

对应的变量(property):Instance.ProperyNam,去读取之前的值和写入新的值

调用对应函数(function):Instance.function(),即执行对应的动作

-> 而需要访问实例的变量和调用实例的函数,当然需要对应的实例Instance对象本身

-> 而Python中就规定好了,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self,以safe为前缀的变量都可供类中的所有方法使用

-> 所以,我们需要self(需要用到self)

class Person:
    def __init__(self, newPersionName):
        self.name = newPersionName
#此处正确的,通过访问self.name的形式,实现了:
# 1.给实例中,增加了name变量
# 2.并且给name赋了初值,为newPersionName

    def sayYourName(self):
        print('My name is %s'%(self.name))
#此处由于开始正确的初始化了self对象,使得其中有了name变量,
#所以此处可以正确访问了name值了


p = Person('Bob')
p.sayYourName()   #第一种调用方法
print("-" * 50)
Person('Bob').sayYourName()#第二种调用方法

在面向对象的编程中,对象是活动主题,类似这个p.sayYourName()的方法调用相当于说:“喂,p,请说出你的名字(sayYourName)。”有时候将函数的责任转到对象上,使我们能够编写功能更加丰富的函数(方法),也使代码的维护和复用更容易。(摘自《像计算机科学家一样思考Python》)

发布于 2019-01-21

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于def __init__(self)的一些知识点 的相关文章

  • Ruby:如何编写 bang 方法,例如地图?

    我想编写一些新的 Array 方法来更改调用对象 如下所示 a 1 2 3 4 a map e e 1 a 2 3 4 5 但我不知道如何做到这一点 我想我需要一个新大脑 所以 我想要这样的东西 class Array def stuff
  • 在 Swift 中声明自引用指针[重复]

    这个问题在这里已经有答案了 这段 Obj C 代码在 swift 中的等价物是什么 我猜测 CMutableVoidPointer 的一些事情 static void CapturingStillImageContext Capturing
  • NameError:名称“self”未在 EXEC/EVAL 中定义

    我正在编码一些东西 并且有一个部分出现错误 但我找不到发生错误的原因 代码 示例 类似于错误部分 class Test def init self a 0 self x a self l 2 x for x in range a lt se
  • 蟒蛇无私

    这以期望的方式工作 class d def init self arg self a arg def p self print a self a x d 1 y d 2 x p y p yielding a 1 a 2 我尝试消除 自我 并
  • Python、__init__ 和自我困惑

    好吧 当我发现这个时 我正在查看一些来源 gt gt gt def parse self filename parse ID3v1 0 tags from MP3 file self clear try fsock open filenam
  • Python2 和 Python3:__init__ 和 __new__

    我读过其他问题来解释两者之间的区别 init and new 但我只是不明白为什么在下面的代码中用 python 2 输出 init 和Python3 new init 示例代码 class ExampleClass def new cls
  • 为什么 Array#each 返回具有相同元素的数组?

    我正在学习如何做的细节each在 ruby 中工作 我尝试了以下代码行 p 1 2 3 4 5 each element el 结果是一个数组 1 2 3 4 5 为什么返回值是each相同的数组 没有each只是提供一种迭代方法 或者这只
  • 在 Go 中,将接收者变量命名为“self”是误导还是好的做法?

    我看过相当多的关于 Go 的博客和视频 据我记得 没有一个作者在编写方法时使用 self 或 this 作为接收者变量 然而 似乎有很多关于堆栈溢出的问题可以做到这一点 这让我思考这是否会误导将变量命名为 self 阅读规格方法集 http
  • Python将self更改为继承的类

    我有这样的结构 class Foo def init self val1 self val1 val1 def changeToGoo self HOW class Goo Foo def init self val1 val2 super
  • 编写我自己的 init 可执行文件

    我想创建自己的 init 并为下雪的周末带来一些 Linux 乐趣 我知道 内核使用 rootfs 启动 并在加载驱动程序和安装磁盘后将流程提供给 sbin init 我下载了ubuntu云镜像并尝试使用kvm直接启动内核 如下所示 kvm
  • PHP 在非静态方法上调用 self

    为什么本例中对非静态方法的 自我 调用有效 class A protected function aNonStaticMethod return class public function aEcho echo self aNonStati
  • iOS - 如何使用 NIB 中的特定框架初始化自定义 UIView

    我想知道初始化自定义的最干净的方法是什么UIView具有特定的框架 The UIView是由一个设计的XIB file 这是我的实现 class CustomView UIView IBOutlet var outletLabel UILa
  • Docker-Compose + Postgres:/docker-entrypoint-initdb.d/init.sql:权限被拒绝

    我有以下 docker compose 文件 version 3 services postgres image postgres 11 2 alpine environment POSTGRES PASSWORD root POSTGRE
  • 什么是 -[NSURL _fastCharacterContents]:?

    所以我在一个方法中调用它 id initWithContentURL NSString url if self super init NSLog xSheetMusicViewController url Casting an NSStri
  • 将符号链接添加到脚本到 rc.d 文件夹中以在系统启动期间启动进程[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我使用的是 Fedora 15 我正在尝试添加 MYSql 守护进程以在系统启动期间启动 我明白我必须将其添加到rc5 d因为它是默认目标并且是gra
  • swift 函数调用:self 关键字与不使用 self 关键字

    我想知道类中的这两个函数调用之间是否有任何区别 self myFuction VS myFunction 它以两种方式发挥作用 有没有必要使用self关键字的情况 大多数情况下 绝对没有区别 但如果省略 self 则更加 迅速 但有一种情况
  • Zend 框架引导问题

    我已经在新安装 Zend Framework 应用程序一段时间了 但我不知道发生了什么 我有两个想要使用的自定义操作助手 并且我想在引导程序中初始化它们 但似乎我的 init 函数根本没有被调用 在启动应用程序的 index php 中 我
  • H2“runscript”命令将所有表名变成大写

    我有一个 sql 脚本 它只是模式定义 该脚本是 mysql 哑巴的修改版本 去掉 h2 不喜欢的坏字符 脚本运行并将架构插入到 h2 数据库中 但问题是所有数据库名称均为大写 xyz 转换为 XYZ 我需要它们保持小写 因为我的应用程序正
  • 继承自 NumPy 数组的类如何更改其自身的值?

    我有一个继承自 NumPy n 维数组的简单类 我想要该类的两个方法可以更改该类实例的数组值 其中一种方法应将类实例的数组设置为类实例的列表数据属性的值 另一种方法应将一些列表值附加到类实例的数组中 我不确定如何实现这一点 但我的尝试如下
  • 为什么 'self.self' 在 swift 中编译并运行?

    昨天我回顾了 Swift 中的一段代码 其中包括这一行 self self someProperty 这让我很惊讶 因为这个词self被保留并用作对当前实例的引用 起初我用其他语言检查了这种现象 但都给出了错误 这并不奇怪 但是 为什么它能

随机推荐