Python中默认参数self的理解

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。

虽然你可以给这个参数任何名称,但是强烈建议你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些IDE(集成开发环境)也可以帮助你。

给C++/Java/C#程序员的注释Python中的self等价于C++中的self指针和Java、C#中的this参考。

你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。



声明add()方法时,若不加self,则提示

TypeError: add() takes exactly 2 arguments (3 given)
File "D:\PythonWorkplace\PythonDemo\Tet.py", line 15, in <module>
  test.add(1,3) 

错误。


拓展一下:

self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。


self是一种习惯,如上面的程序,把sayHi(self)换成sayHi(fles),同样可以得到正确的输出。


### Python `self` 参数的作用和用法 #### 基本概念 在 Python 的面向对象编程中,`self` 是一个约定俗成的名字,用来表示类的实例本身。当创建了一个类的方法时,在方法的第一个参数位置上通常会看到 `self` 这个名称。这并不是关键字而是惯例;然而,强烈建议遵循此命名习惯以便其他开发者能够更容易理解代码。 #### 访问属性与方法 通过使用 `self` 可以方便地访问属于该类的数据成员(即变量)以及成员函数(即方法)。这意味着如果想要在一个方法内部操作或读取另一个由同一个类定义出来的特性,则应该借助于 `self` 来完成这样的调用[^2]。 ```python class ExampleClass: def __init__(self, initial_value): self.attribute_name = initial_value def modify_attribute(self, new_value): self.attribute_name = new_value def display_attribute(self): print(f"The current attribute is {self.attribute_name}") ``` 在这个例子中: - 构造器 `__init__()` 接收两个参数:隐式的 `self` 和显式的 `initial_value`。 - 方法 `modify_attribute(new_value)` 修改了名为 `attribute_name` 的实例变量。 - 方法 `display_attribute()` 打印当前存储在 `attribute_name` 中的内容。 每次调用这些方法时,Python 自动传递相应的实例作为第一个实参给它们,因此不需要手动提供这个参数。 #### 实际应用案例 下面展示如何利用上述原理来实现具体功能并观察其行为变化。 ```python # 定义一个简单的计数器类 class Counter: def __init__(self, start=0): self.count = start # 初始化计数值 def increase(self): self.count += 1 # 更新计数值 def show_count(self): return f"Current count: {self.count}" counter_instance = Counter(5) # 创建一个新的计数器实例,初始值设为5 print(counter_instance.show_count())# 输出 "Current count: 5" counter_instance.increase() # 对象状态发生改变 print(counter_instance.show_count())# 输出 "Current count: 6" ``` 这段程序展示了怎样构建一个具有简单逻辑结构的小型应用程序——每当执行一次增加动作之后都会更新内部的状态,并可以通过查询接口获取最新的统计信息[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值