python之self

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗,不要搞另类,大家会不明白的。下例中将self改为myname一样没有错误:

复制代码
1 class Person:
2 def _init_(myname,name):
3 myname.name=name
4 def sayhello(myname):
5 print 'My name is:',myname.name
6 p=Person('Bill')
7 print p
复制代码

self指的是类实例对象本身(注意:不是类本身)。

复制代码
1 class Person:
2 def _init_(self,name):
3 self.name=name
4 def sayhello(self):
5 print 'My name is:',self.name
6 p=Person('Bill')
7 print p
复制代码

在上述例子中,self指向Person的实例p。 为什么不是指向类本身呢,如下例子:

复制代码
1 class Person:
2 def _init_(self,name):
3 self.name=name
4 def sayhello(self):
5 print 'My name is:',self.name
6 p=Person('Bill')
7 p1 = Person('Apple')
8 print p
复制代码

如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?

### self 参数的作用和用法 在 Python 的类中,`self` 是一个特殊的参数,用于表示类的实例本身。它在类的方法定义中作为第一个参数出现,允许方法访问和操作实例的属性及其他方法。Python 会自动将实例作为 `self` 参数传递给方法,因此在调用方法时不需要显式传递它。 #### 1. 访问和修改实例属性 `self` 允许类的方法访问和修改实例的属性。通过 `self`,可以在类的方法中引用当前实例的变量,并对它们进行操作。 ```python class Person: def __init__(self, name): self.name = name # 初始化实例属性 def greet(self): print(f"Hello, my name is {self.name}.") # 访问实例属性 ``` #### 2. 调用其他实例方法 除了访问属性,`self` 还可以用来调用类中的其他方法。这使得方法之间可以相互协作,提高代码的模块化和可重用性。 ```python class Calculator: def add(self, a, b): return a + b def calculate(self, a, b): result = self.add(a, b) # 通过 self 调用其他方法 return result ``` #### 3. 数据封装与管理 `self` 是 Python 实现面向对象编程的核心机制之一。它支持数据封装,即通过类的方法管理实例的状态和行为,而不是直接操作属性。这有助于提高代码的安全性和可维护性。 #### 4. 方法链接 通过 `self` 返回实例本身,可以实现方法链式调用,使代码更加简洁和易读。 ```python class Example: def set_value(self, value): self.value = value return self # 返回 self 以支持方法链 def display(self): print(self.value) return self # 链式调用 example = Example().set_value(10).display() ``` #### 5. 注意事项 - `self` 只是一个约定俗成的名称,并不是 Python 的关键字。虽然可以使用其他名称(如 `this`),但为了代码的可读性和一致性,建议始终使用 `self`。 - 在定义类方法时,`self` 必须作为第一个参数出现,否则会引发错误。 - 在静态方法(`@staticmethod`)或类方法(`@classmethod`)中,`self` 不会被自动传递。类方法使用 `cls` 作为第一个参数,表示类本身。 ```python class MyClass: @staticmethod def static_method(): print("This is a static method.") @classmethod def class_method(cls): print(f"This is a class method of {cls}.") ``` #### 6. `self` 与 `cls` 的区别 - `self` 用于实例方法,代表类的实例。 - `cls` 用于类方法,代表类本身。 类方法通常用于操作类级别的属性或行为,而实例方法用于操作特定对象的状态。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值