logo

파이썬 생성자

생성자는 클래스의 인스턴스 멤버를 초기화하는 데 사용되는 특수한 유형의 메서드(함수)입니다.

C++ 또는 Java에서 생성자는 클래스와 동일한 이름을 가지지만 Python에서는 생성자를 다르게 처리합니다. 객체를 생성하는데 사용됩니다.

생성자는 두 가지 유형이 있을 수 있습니다.

  1. 매개변수화된 생성자
  2. 매개변수화되지 않은 생성자

생성자 정의는 이 클래스의 객체를 생성할 때 실행됩니다. 생성자는 또한 개체가 시작 작업을 수행하는 데 충분한 리소스가 있는지 확인합니다.

Python에서 생성자 만들기

Python에서 메소드는 __열__() 클래스의 생성자를 시뮬레이션합니다. 이 메서드는 클래스가 인스턴스화될 때 호출됩니다. 그것은 받아들인다 본인 -클래스의 속성이나 메소드에 액세스할 수 있는 첫 번째 인수인 키워드.

클래스 객체를 생성할 때 인수에 따라 원하는 만큼의 인수를 전달할 수 있습니다. __열__() 정의. 주로 클래스 속성을 초기화하는 데 사용됩니다. 단순히 기본 생성자에 의존하는 경우에도 모든 클래스에는 생성자가 있어야 합니다.

초기화하려면 다음 예를 고려하십시오. 직원 클래스 속성.

 class Employee: def __init__(self, name, id): self.id = id self.name = name def display(self): print('ID: %d 
Name: %s' % (self.id, self.name)) emp1 = Employee('John', 101) emp2 = Employee('David', 102) # accessing display() method to print employee 1 information emp1.display() # accessing display() method to print employee 2 information emp2.display() 

산출:

 ID: 101 Name: John ID: 102 Name: David 

클래스의 객체 수 계산

생성자는 클래스의 객체를 생성할 때 자동으로 호출됩니다. 다음 예를 고려하십시오.

 class Student: count = 0 def __init__(self): Student.count = Student.count + 1 s1=Student() s2=Student() s3=Student() print('The number of students:',Student.count) 

산출:

 The number of students: 3 

매개변수가 없는 Python 생성자

매개변수화되지 않은 생성자는 값을 조작하고 싶지 않을 때 사용하거나 self만 인수로 갖는 생성자를 사용합니다. 다음 예를 고려하십시오.

 class Student: # Constructor - non parameterized def __init__(self): print('This is non parametrized constructor') def show(self,name): print('Hello',name) student = Student() student.show('John') 

Python 매개변수화된 생성자

매개변수화된 생성자에는 다음과 같은 여러 매개변수가 있습니다. 본인 . 다음 예를 고려하십시오.

 class Student: # Constructor - parameterized def __init__(self, name): print('This is parametrized constructor') self.name = name def show(self): print('Hello',self.name) student = Student('John') student.show() 

산출:

 This is parametrized constructor Hello John 

Python 기본 생성자

클래스에 생성자를 포함하지 않거나 선언하는 것을 잊어버린 경우 해당 생성자가 기본 생성자가 됩니다. 어떤 작업도 수행하지 않지만 개체를 ​​초기화합니다. 다음 예를 고려하십시오.

 class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display() 

산출:

 101 Joseph 

단일 클래스에 둘 이상의 생성자

또 다른 시나리오를 살펴보겠습니다. 클래스에서 두 개의 동일한 생성자를 선언하면 어떤 일이 발생합니까?

 class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student() 

산출:

 The Second Constructor 

위 코드에서 객체는 두 번째 생성자를 호출하지만 둘 다 동일한 구성을 갖습니다. 첫 번째 방법은 액세스할 수 없습니다. 물체. 내부적으로 클래스에 생성자가 여러 개 있는 경우 클래스의 개체는 항상 마지막 생성자를 호출합니다.

참고: Python에서는 생성자 오버로드가 허용되지 않습니다.

Python 내장 클래스 함수

클래스에 정의된 내장 함수는 다음 표에 설명되어 있습니다.

SN 기능 설명
1 getattr(obj,이름,기본값) 객체의 속성에 액세스하는 데 사용됩니다.
2 setattr(obj, 이름, 값) 객체의 특정 속성에 특정 값을 설정하는 데 사용됩니다.
delattr(obj, 이름) 특정 속성을 삭제하는 데 사용됩니다.
4 hasattr(obj, 이름) 객체에 특정 속성이 포함되어 있으면 true를 반환합니다.

 class Student: def __init__(self, name, id, age): self.name = name self.id = id self.age = age # creates the object of the class Student s = Student('John', 101, 22) # prints the attribute name of the object s print(getattr(s, 'name')) # reset the value of attribute age to 23 setattr(s, 'age', 23) # prints the modified value of age print(getattr(s, 'age')) # prints true if the student contains the attribute with name id print(hasattr(s, 'id')) # deletes the attribute age delattr(s, 'age') # this will give an error since the attribute age has been deleted print(s.age) 

산출:

 John 23 True AttributeError: 'Student' object has no attribute 'age' 

내장 클래스 속성

다른 속성과 함께 Python 클래스에는 클래스에 대한 정보를 제공하는 일부 내장 클래스 속성도 포함되어 있습니다.

내장 클래스 속성은 아래 표에 나와 있습니다.

SN 기인하다 설명
1 __dict__ 클래스 네임스페이스에 대한 정보가 포함된 사전을 제공합니다.
2 __문서__ 클래스 문서가 있는 문자열을 포함합니다.
__이름__ 클래스 이름에 액세스하는 데 사용됩니다.
4 __기준 치수__ 이 클래스가 정의된 모듈에 액세스하는 데 사용됩니다.
5 __베이스__ 여기에는 모든 기본 클래스를 포함하는 튜플이 포함되어 있습니다.

 class Student: def __init__(self,name,id,age): self.name = name; self.id = id; self.age = age def display_details(self): print('Name:%s, ID:%d, age:%d'%(self.name,self.id)) s = Student('John',101,22) print(s.__doc__) print(s.__dict__) print(s.__module__) 

산출:

 None {'name': 'John', 'id': 101, 'age': 22} __main__