self和init

python中的__init__理解是实例化后的python对象

self相当于实例化后的对象调用的属性


### Python 中 `self` 在 `__init__` 方法中的作用 在 Python 的类定义中,`self` 是实例对象的一个引用。当创建一个类的实例时,`self` 参数会自动指向这个新创建的对象[^1]。通过 `self`,可以在类的方法内部访问修改该实例的属性。 以下是关于 `self` `__init__` 方法的一些重要概念: #### 1. 初始化实例变量 `__init__` 方法是一个特殊方法,在创建类的新实例时会被调用。它用于初始化新创建的对象的状态。在这个过程中,可以通过 `self` 来设置属于当前实例的属性。例如: ```python class Country: def __init__(self, name): self.name = name # 使用 self 设置实例变量 def hello(self): print('Hello, my name is', self.name) c = Country('India') print(c.name) # 输出 'India' ``` 在这里,`self.name` 将参数 `name` 绑定到实例上,使得每次创建新的 `Country` 对象时都可以存储不同的名称。 #### 2. 访问实例变量 除了在 `__init__` 方法中设置实例变量外,还可以在整个类的其他方法中使用 `self` 来访问这些变量。这允许不同方法之间共享数据。 ```python def hello(self): print('Hello, my name is', self.name) ``` 上述代码片段展示了如何利用 `self` 引用来获取之前由 `__init__` 定义好的实例变量 `name` 并打印出来。 #### 3. 静态方法与类方法的区别 需要注意的是,虽然大多数情况下我们会在普通方法里看到 `self` 参数,但在静态方法 (`@staticmethod`) 或者类方法 (`@classmethod`) 中并不会传递隐式的第一个参数 (即 `self`)。这是因为它们分别绑定于整个类而不是具体的某个实例[^2]。 对于下面的例子来说: ```python class MyClass: @staticmethod def static_method(): pass # No access to instance via self here! @classmethod def class_method(cls): cls.some_class_variable += 1 # Accesses the class itself through cls instead of an individual object. ``` 这里既没有涉及任何特定实例的操作也没有依赖单个实体的行为模式;因此无需借助 `self` 实现功能扩展或者状态维护等功能需求场景下显得尤为重要。 #### 4. 特殊方法如 `__str__` 另外值得注意的一点是像 `__str__()` 这样的魔术方法同样接收 `self` 参数以便能够操作对应的实例并返回其字符串表示形式给外部使用者查看方便理解复杂结构化信息等内容展示方面具有重要意义[^3]: ```python class Person: def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name def __str__(self): return f"{self.first_name} {self.last_name}" p = Person("John", "Doe") print(p) # 调用了 p.__str__() ``` 此例子表明即使是在重写内置函数行为的时候也需要依靠 `self` 才能正确处理各个独立个体之间的差异之处从而达到预期效果.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值