self
的含义
在 Python 类中,self
代表 当前实例对象。在方法定义中,self
允许方法访问 类的属性和其他方法。
比如,在你的 Evaluator
类中,evaluate(self, data)
需要 self
来访问 self.target_column
,即 Evaluator
实例的目标列(label)。
📌 self
的作用
1️⃣ 访问类的属性
class Evaluator:
def __init__(self, target_column):
self.target_column = target_column # 存储目标列名
def evaluate(self, data):
# `self.target_column` 访问实例的 target_column
X = data.drop(self.target_column, axis=1)
y = data[self.target_column]
💡 如果 evaluate()
里面不使用 self
,那么 target_column
只能作为参数传递,而不能在对象初始化时存储。
2️⃣ 访问类的其他方法
假设 Evaluator
还有一个 get_model()
方法,evaluate()
需要使用它:
class Evaluator:
def __init__(self, target_column):
self.target_column = target_column
def get_model(self):
return RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
def evaluate(self, data):
X = data.drop(self.target_column, axis=1)
y = data[self.target_column]
model = self.get_model() # 使用 self 调用类内的方法
model.fit(X, y)
💡 如果不使用 self.get_model()
,evaluate()
无法调用 get_model()
。
📌 self
的使用方法
✅ 正确示例:创建 Evaluator
对象并调用 evaluate()
# 创建 Evaluator 实例
evaluator = Evaluator(target_column="salary")
# 传入数据进行评估
data = pd.DataFrame({
'age': [25, 30, 35, 40, 45],
'salary': [5000, 6000, 7000, 8000, 9000]
})
result = evaluator.evaluate(data)
print(result)
💡 这里 evaluator.evaluate(data)
内部 self
指向 evaluator
实例,所以可以访问 self.target_column
。
📌 总结
✅ self
代表实例对象,允许方法访问实例的属性和其他方法
✅ 在类的方法中,必须使用 self
访问类的变量
✅ 调用方法时,self
是隐式传递的(不需要传递 self
作为参数)
🎯 简单记住:在类中,凡是需要跨方法访问的变量,都应该用 self
绑定! 🚀