1. 它是什么

__init__ 是类的初始化方法,前后双下划线,叫魔术方法(魔法函数)
作用:创建对象实例时自动执行,用来给对象绑定属性、做初始化配置。

2. 执行时机

class Person:
    def __init__(self, name):
        print("__init__ 自动运行了!")
        # self代表当前新建的实例对象
        self.name = name

# 只要写这一句,立刻调用 __init__
p = Person("小明")
# 输出:__init__ 自动运行了!
  • Person("小明"):先创建一块空的对象内存
  • 自动调用 __init__(self, "小明")
  • self 自动传入刚创建好的对象,用来挂载属性

3. self 是什么

self固定第一个参数,指代当前实例本身。
通过 self.xxx 定义实例属性,每个对象独立拥有:

class Person:
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age

p1 = Person("张三", 20)
p2 = Person("李四", 22)
print(p1.name)  # 张三
print(p2.name)  # 李四

4. 核心作用

  1. 接收创建对象时传入的参数;
  2. 给每个实例绑定专属变量(属性);
  3. 初始化需要的资源(比如创建张量、打开文件、初始化权重);
  4. 做初始校验、默认赋值。

5. 常见配套用法

(1)设置参数默认值

class Person:
    def __init__(self, name, age=18):
        self.name = name
        self.age = age

p = Person("小红")  # age自动=18

(2)结合你前面的Logistic回归代码举例

class LogisticRegressionManual(object):
    def __init__(self):
        # 创建实例时,自动初始化权重w、偏置b
        self.w = torch.randn(size=(2, 1), requires_grad=True)
        self.b = torch.randn(size=(1, 1), requires_grad=True)
# lrm = LogisticRegressionManual()
# 执行这一行,自动运行__init__,创建w和b

6. 容易混淆:__init____new__

  • __new__:真正创建空白对象(分配内存)
  • __init__:对象创建完成后,填充初始化数据
    日常写代码几乎只用 __init__

7. 关键总结

  1. 类定义里默认第一个写的函数就是 __init__,是类的入口初始化函数;
  2. 创建实例时自动调用,不用手动写 obj.__init__()
  3. 第一个参数必须是 self,代表自身实例;
  4. 所有 self.属性 是每个对象独有的数据;
  5. 双下划线包裹的函数统称魔术方法,Python内部自动触发执行。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐