首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么self只是一个约定而不是一个真正的Python关键字?

self只是一个约定而不是一个真正的Python关键字,是因为Python的设计哲学之一是简洁性和可读性。在Python中,self被约定为类方法的第一个参数,用于引用实例对象本身。这种约定使得代码更加易读和易懂。

在Python中,self并不是一个关键字,而是一个普通的参数名。Python解释器并不会对self进行特殊处理,它只是一个约定,用于表示实例对象本身。这样的设计使得Python的语法更加简洁,避免了引入额外的关键字。

使用self作为约定的好处是:

  1. 代码可读性高:self作为第一个参数,明确地表示该方法是一个实例方法,易于理解和阅读。
  2. 代码一致性:大部分Python开发者都遵循这个约定,使得代码在不同项目中具有一致性。
  3. 避免命名冲突:由于self是一个约定而不是关键字,开发者可以自由选择其他参数名,避免与其他变量或关键字发生冲突。

在Python中,self的使用示例:

代码语言:python
代码运行次数:0
复制
class MyClass:
    def __init__(self, name):
        self.name = name

    def say_hello(self):
        print("Hello, my name is", self.name)

obj = MyClass("Alice")
obj.say_hello()

在上述示例中,self作为约定的第一个参数,用于引用实例对象本身。通过self.name,我们可以在类的方法中访问实例对象的属性。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 C# string.Empty 是一个静态只读字段,不是一个常量呢?

进一步可以发现 string.Empty 实际上是一个静态只读字段,不是一个常量。 为什么这个看起来最适合是常量 string.Empty,竟然使用静态只读字段呢?...也就是说,string.Empty 字段并不是一个普通字段,对它调用会被特殊处理。但是是如何特殊处理呢?...string.Empty 需要是一个静态只读字段不是常量?...String 类构造函数(注意不是静态构造函数,String 类静态构造函数是特殊处理不会调用); 如果这是一个静态字段,那么编译器可以在不做特殊处理情况下,生成 ldsfld string...于是,当你需要一个代表 “空字符串” 含义时候,使用 string.Empty;当你必须要一个常量时,就使用 ""。

1.1K00

我终于把Python中下划线含义弄清楚了(憋了很久了)

不是Python强制执行Python在Java“私有”变量和“公共”变量之间没有明显区别。就像有人贴了一个很小下划线警告标志,上面写着: “嘿,这并不是真正成为此类公共接口一部分。..._internal_func() 42 单下划线是一种Python命名约定,表示某个名称是供内部使用。它通常不是Python解释器强制执行只是对程序员提示。...单尾划线: var_ 有时候,一个变量最合适名字已经被一个关键字代替了。因此,类或def之类名称在Python中不能用作变量名。...pass 总之,惯例使用单个尾划线(后缀)来避免与Python关键字命名冲突。在PEP 8中解释了这种约定。...同样,这只是“按照约定意思,在Python解释器中没有触发任何特殊行为。单个下划线只是一个有效变量名。 在下面的代码示例中,我将一个car元组解压缩到单独变量中,但我只对颜色和值感兴趣。

10.6K21
  • 理解Python下划线(_)五种用法

    在 from module import *中,任何具有此约定内容都将被忽略。 然而,当然,Python不支持真正私有,所以我们不能强制一些私有的东西,也可以直接从其他模块调用它。..._double_price() single_trailing_underscore_ (尾部单下滑线) 此约定可用于避免与Python关键字或内置项发生冲突。你可能不经常使用它。...List.objects.get(1) # Avoid conflict with 'list' built-in type __double_leading_underscore (首部双下划线) 这是语法不是约定...(所谓“矫正”是指编译器或解释器用一些规则修改变量或函数名,不是按原样使用) Python矫正规则是在属性名前面加上双下划线声明“_ClassName”。...有时,有些人使用它就像真正私人使用这些功能,但它不是私人,也不推荐这样做。

    2.2K10

    Python中下划线5种含义

    下划线前缀含义是告知其他程序员:以单个下划线开头变量或方法仅供内部使用。 该约定在PEP 8中有定义。 这不是Python强制规定。...如果你遵循PEP 8推荐,避免通配符导入,那么你真正需要记住只有这个: 单个下划线是一个Python命名约定,表示这个名称是供内部使用。...它通常不由Python解释器强制执行,仅仅作为一种对程序员提示。 2. 单末尾下划线 var_ 有时候,一个变量最合适名称已经被一个关键字所占用。...pass 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。 PEP 8解释了这个约定。 3....你也可以在拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值。 同样,这个含义只是“依照约定”,并不会在Python解释器中触发特殊行为。

    1.5K70

    Python中 5 种不同下划线含义你都知道吗?

    下划线前缀含义是告知其他程序员:以单个下划线开头变量或方法仅供内部使用。该约定在PEP 8中有定义。 这不是Python强制规定。...如果你遵循PEP 8推荐,避免通配符导入,那么你真正需要记住只有这个: “单个下划线是一个Python命名约定,表示这个名称是供内部使用。...它通常不由Python解释器强制执行,仅仅作为一种对程序员提示。 ” 2. 单末尾下划线 var_ 有时候,一个变量最合适名称已经被一个关键字所占用。...pass 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。PEP 8解释了这个约定。 3....你也可以在拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值。同样,这个含义只是“依照约定”,并不会在Python解释器中触发特殊行为。

    87531

    掌握 Python 中下划线 5 个潜规则

    下划线前缀含义是告知其他程序员:以单个下划线开头变量或方法仅供内部使用。该约定在PEP 8中有定义。 这不是Python强制规定。...如果你遵循PEP 8推荐,避免通配符导入,那么你真正需要记住只有这个: “单个下划线是一个Python命名约定,表示这个名称是供内部使用。...它通常不由Python解释器强制执行,仅仅作为一种对程序员提示。 ” 2. 单末尾下划线 var_ 有时候,一个变量最合适名称已经被一个关键字所占用。...pass 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。PEP 8解释了这个约定。 3....你也可以在拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值。同样,这个含义只是“依照约定”,并不会在Python解释器中触发特殊行为。

    53120

    构造Python常量类

    构建常量 Python中不存在像const那样常量关键字只是在内建空间中提供了一小部分常量,比如True、False、None等。那么在Python中如何使用常量呢?...然而这种方式并没有真正实现常量,其对应值仍然可以被改变,这只是一种约定俗成风格。 通过自定义类实现常量功能。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。...下面我们就来看一个例子。...const.AUTHOR = 'tzw0745' 上面的const.AUTHOR定义后便不可再更改,因此const.AUTHOR = ‘anonymity’会抛出const.ConstError异常,常量名称如果小写...---- 将常量集中到一个文件 无论采用那种方式实现常量,都建议将常量集中到一个文件中,因为这样有利于维护,一旦修改常量值,可以集中统一进行不是逐个进行检查。

    3.3K20

    Python下划线5种含义代码实例解析

    五种Python下划线模式速查表: ? 单前导下划线:_var 当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成含义。...该约定在PEP 8中有定义。 这不是Python强制规定Python不像Java那样在“私有”和“公共”变量之间有很强区别。...这就像有人提出了一个小小下划线警告标志,说: “嘿,这不是真的要成为类公共接口一部分。不去管它就好。“ 单末尾下划线 var_ 有时候,一个变量最合适名称已经被一个关键字所占用。...pass 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。 PEP 8解释了这个约定。...你也可以在拆分(unpacking)表达式中将单个下划线用作“不关心”变量,以忽略特定值。 同样,这个含义只是“依照约定”,并不会在Python解释器中触发特殊行为。

    69920

    Pythonself理由

    Pythonself理由 Python方法和普通函数有一个很明显区别,在类方法必须有个额外一个参数 (self ),但在调用这个方法时候不必为这个参数赋值 (显胜于隐 引发)。...Python方法这个特别的参数指代是对象本身,按照Python惯例,它用self来表示。...(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self) 为何Pythonself赋值而你不必给self赋值?...p = Python() p.selfDemo() 这样就报错了:TypeError: selfDemo() takes no arguments (1 given) 扩展 selfPython不是关键字...self名称不是必须,在pythonself不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗,不要搞另类,大家会不明白

    38710

    Python 中5种下划线含义都是什么?

    不是Python强制规定Python不像Java那样在“私有”和“公共”变量之间有很强区别。 这就像有人提出了一个小小下划线警告标志,说: “嘿,这不是真的要成为类公共接口一部分。...二 单末尾下划线:var_ 1 说明 有时候一个变量最合适名称已经被一个关键字所占用, 因此,像class或def这样名称不能用作Python变量名称。...2 示例 为避免冲突,你可以附加一个下划线来解决命名冲突: 3 小结 总之,单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突。PEP8解释了这个约定。..._bar行为方式相同 - 它以_bar形式显示在类上。 就像我之前说过,在这种情况下,前导下划线仅仅是一个约定。 给程序员一个提示而已。 然而,对于self....同样,这个含义只是“依照约定”,并不会在Python解释器中触发特殊行为。 单个下划线仅仅是一个有效变量名称,会有这个用途而已。

    1.3K40

    Python 关于面向对象 6 个问题

    本文写给初学 Python 朋友,试图讲明白以下问题: 0、什么是类和对象? 1、即然有了函数,为什么还要有类? 2、Python 如何定义 公有/保护/私有 属性/方法?...再说说类,类就是分类类,代表着一群有着相似性事物集合,对应 Python 关键字 class。...如果没有类,我们更容易写出屎山一样代码,牵一发动全身,不敢修改。有了类,我们更容易写出易读、易维护、可扩展代码。 2. Python 如何定义 公有/保护/私有 属性/方法?...私有是否是真正私有,这样做目的是什么?...Python 以以下形式约定保护/私有的属性/方法: __ 表示私有 _ 表示保护 除前两者外就是公有 所谓约定,就是你看到双下划线或单下划线开头变量或方法时就自觉不要在类外部修改或访问它,换句话说

    55121

    Python专家编程系列: 5. 下划线在命名中约定(Underscores in Python)

    介绍 在各种python编码规范中,都对命名规则做了很详细约定。 但是下划线和变量名称组合,在python中都有特定含义。...这些含义有些是一种认为约定,有些是python解释器严格执行准则。 有必要掌握这些约定,来写出专业代码。 2....因此此处单前下划线含义是按照惯例,不是Python 解释器强制执行。...此通配符导入不包括私有导入,这就是为什么在尝试访问单前下划线变量时引发异常原因。除了变量以外,函数命名也是一样规则。 所以这里它是由Python解释器强制执行。...: https://blog.csdn.net/quant_galaxy 欢迎交流 3.3 双前导下划线(Double Leading Underscore): __variable 使用带有变量双前导下划线不是一种约定

    22340

    Python - 面向对象编程 - self 参数

    为什么要讲 self 参数 class PoloBlog: def __init__(self): ... def say(self): ......在类里面,所有实例方法都需要加 self 参数,且排在第一个,有且仅有一个 self 参数含义 在类中定义方法,第一个参数 self 指向调用该方法实例对象,在方法中通过 self.属性 这样形式访问对象实例属性...self 参数真的必须叫 self 吗 其实并不是Python 只是规定,无论是构造方法还是实例方法,最少要包含一个参数,并没有规定该参数具体名称 之所以将其命名为 self只是约定俗成一种习惯...如何理解 self 参数 类比 如果把类比作造房子图纸 类实例化后对象是真正可以住房子 根据一张图纸(类),可以设计出成千上万房子(实例对象) 每个房子长相都是类似的(都有相同实例属性和实例方法...,该对象会把自身引用作为第一个参数自动传递给该方法 换句话说:Python 会自动将实例方法一个参数指向调用该方法对象 这样,Python 解释器就知道到底要执行哪个对象实例方法了 调用实例方法时候

    39130

    Python 为什么要保留显式 self

    Bruce 提议 Bruce 知道,我们需要一种方法来区分对实例变量引用和对其它变量引用,因此他建议将“self”设为关键字。...: m2() takes exactly 3 arguments (2 given) 我赞同它是令人困惑,但是我宁愿去解决此错误消息,不是修改语言。...Python 约定了一种方式,即在定义时用第一个参数作区分:self 表示实例方法、cls或其它符号 表示类方法……三种方法都可以被类实例调用,而且看起来一模一样,如上例等号左侧那样。...但是,这个习语很容易出错(正是由于需要显式地传递"self"原因),这就是为什么Python 3000中,我建议在所有情况下都使用"super()"原因。...当装饰一个方法时,我们不知道是否要自动地给它加一个self”参数:装饰器可以将函数变成一个静态方法(没有“self”)或一个类方法(有一个有趣 self,它指向一个不是一个实例),或者可以做一些完全不同事情

    26030

    Python 为什么要保留显式 self

    Bruce 提议 Bruce 知道,我们需要一种方法来区分对实例变量引用和对其它变量引用,因此他建议将“self”设为关键字。...: m2() takes exactly 3 arguments (2 given) 我赞同它是令人困惑,但是我宁愿去解决此错误消息,不是修改语言。...Python 约定了一种方式,即在定义时用第一个参数作区分:self 表示实例方法、cls或其它符号 表示类方法……三种方法都可以被类实例调用,而且看起来一模一样,如上例等号左侧那样。...但是,这个习语很容易出错(正是由于需要显式地传递"self"原因),这就是为什么Python 3000中,我建议在所有情况下都使用"super()"原因。...当装饰一个方法时,我们不知道是否要自动地给它加一个self”参数:装饰器可以将函数变成一个静态方法(没有“self”)或一个类方法(有一个有趣 self,它指向一个不是一个实例),或者可以做一些完全不同事情

    50130

    关于Python前后、单双下划线作用,看完这篇文章,吊打面试官!

    来源:清风python python各种下划线 在Python中,可能最常见就是各种常量、变量、函数、方法前后添加那些下划线了。有前面加、后面加,加一个,加两个,看到头晕。...单末尾下划线 单末尾下划线(xxx_),按照PEP8规定,单末尾下划线也是一个约定 用来避免与python关键字产生命名冲突。...但是,如果你非要使用这种写法去声明,那可真是无底坑...如果你声明变量不是内置魔法方法,Python会将它当做普通变量来操作。...如果和内置方法重名,要么重写,要么因为功能冲突引发报错,所以不作死就不会死,还是别这么玩了。 双前导下划线 这个为什么放在最后,因为压轴啊!...通过property创建了一个money属性,当用户对money赋值时,money.setter方法是空,你怎么赋值都是无用(空干嘛还要写,因为不写会报错啊...AttributeError

    3.2K10

    通过 for 循环,比较 Python 与 Ruby 编程思想差别

    Python 拥有for语句。对象告诉for如何进行协作,for循环体会处理对象返回内容。 Ruby 则相反。在 Ruby 中,for 本身(通过 each)是对象一个方法。...在基于 C OO 中,就像 posix 文件描述符或 Win32 窗口句柄一样,语言并不强制将“方法”与对象本身绑定。相反,对象到方法绑定只是基于约定。...类方法接收“self”作为其第一个参数,几乎与 Win32 或 Posix API 中 C 函数接受句柄方式相同。当函数被传递时,它们几乎被当作 C 函数指针来对待。...Ruby 有真正私有方法,不像 Python 私有方法/参数,只是出于约定。 毫无疑问,当我从系统编程角度接触 Python 时,它对我观感来说是很自然。...难怪 Ruby 很适合开发人员构建更流畅、也许更安全 API 和 DSL。Ruby 希望程序员对领域进行建模,不是对编程环境进行建模,这对于许多工作来说,似乎是正确方法。

    35410

    通过 for 循环,比较 Python 与 Ruby 编程思想差别

    Python 拥有for语句。对象告诉for如何进行协作,for循环体会处理对象返回内容。 Ruby 则相反。在 Ruby 中,for本身(通过each)是对象一个方法。...在基于 C OO 中,就像 posix 文件描述符或 Win32 窗口句柄一样,语言并不强制将“方法”与对象本身绑定。相反,对象到方法绑定只是基于约定。...类方法接收“self”作为其第一个参数,几乎与 Win32 或 Posix API 中 C 函数接受句柄方式相同。当函数被传递时,它们几乎被当作 C 函数指针来对待。...Ruby 有真正私有方法,不像 Python 私有方法/参数,只是出于约定。 毫无疑问,当我从系统编程角度接触 Python 时,它对我观感来说是很自然。...难怪 Ruby 很适合开发人员构建更流畅、也许更安全 API 和 DSL。Ruby 希望程序员对领域进行建模,不是对编程环境进行建模,这对于许多工作来说,似乎是正确方法。

    71920

    通过 for 循环,比较 Python 与 Ruby 编程思想差别

    Ruby 与 Python 之间差异在很大程度上可通过for循环看出本质。 Python 拥有for语句。对象告诉for如何进行协作,for循环体会处理对象返回内容。 Ruby 则相反。...在基于 C OO 中,就像 posix 文件描述符或 Win32 窗口句柄一样,语言并不强制将“方法”与对象本身绑定。相反,对象到方法绑定只是基于约定。...类方法接收“self”作为其第一个参数,几乎与 Win32 或 Posix API 中 C 函数接受句柄方式相同。当函数被传递时,它们几乎被当作 C 函数指针来对待。...Ruby 有真正私有方法,不像 Python 私有方法/参数,只是出于约定。 毫无疑问,当我从系统编程角度接触 Python 时,它对我观感来说是很自然。...难怪 Ruby 很适合开发人员构建更流畅、也许更安全 API 和 DSL。Ruby 希望程序员对领域进行建模,不是对编程环境进行建模,这对于许多工作来说,似乎是正确方法。

    82310
    领券