
class SimpleDNN(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super().__init__() ... (하략)
super().__init__() 이 뭐야?
torch.nn.Module을 상속받아 신경망 모델로서 필요한 다양한 기능을 물려받습니다.super() 함수: 이 함수는 자식 클래스에서 부모 클래스를 참조할 수 있게 해줍니다. 특히, 부모 클래스의 메서드(생성자 포함)를 호출할 때 유용합니다.
__init__() 함수: 클래스가 생성될 때 자동으로 호출되는 생성자 함수입니다. 부모 클래스에도 고유의 __init__() 메서드가 있을 수 있으며, 이를 자식 클래스에서 사용하고 싶을 때 super().__init__()을 호출합니다.
부모 클래스의 초기화: 부모 클래스가 특정 변수를 초기화하거나 중요한 설정을 할 수 있습니다. 이를 자식 클래스에서 사용해야 할 때, super().__init__()을 통해 그 작업을 수행합니다.
코드 중복 방지: 부모 클래스에서 이미 정의된 초기화 작업을 다시 작성할 필요 없이, 자식 클래스에서 super()로 호출하여 활용할 수 있습니다.
class Parent:
def __init__(self, name):
self.name = name
print("Parent class initialized")
class Child(Parent):
def __init__(self, name, age):
# 부모 클래스의 __init__을 호출하여 name을 초기화
super().__init__(name)
self.age = age
print("Child class initialized")
child = Child("Alice", 25)
출력 결과:
Parent class initialized
Child class initialized
super().__init__()(name)가 없으면 Parent 클래스의 name 변수가 초기화되지 않아 오류가 발생할 수 있습니다.
super().__init__()(name)는 Parent 클래스의 생성자를 호출하여 name 변수를 설정하고, 그 후 자식 클래스에서 추가 작업을 수행할 수 있습니다.
즉, super().__init__()(name)는 부모 클래스의 속성이나 메서드를 자식 클래스에서도 사용할 수 있게 해주는 중요한 역할을 합니다.