파이썬 new 키워드

Aditya Raj 2023년1월30일
  1. 파이썬에서 __new__ 키워드는 무엇입니까?
  2. Python에서 new 키워드를 사용하는 방법은 무엇입니까?
  3. __new__() 메서드를 어떻게 명시적으로 구현할 수 있습니까?
  4. 결론
파이썬 new 키워드

C++ 및 Java와 같은 프로그래밍 언어에서는 new 키워드를 명시적으로 사용하여 클래스에서 객체를 생성할 수 있습니다. 그러나 Python에서는 new 키워드를 직접 사용할 수 없습니다. 이 기사에서는 new 키워드가 파이썬에서 어떻게 작동하는지 논의할 것입니다. 또한 new 키워드를 명시적으로 사용하여 Python에서 객체 생성 프로세스를 관찰하는 방법도 살펴보겠습니다.

파이썬에서 __new__ 키워드는 무엇입니까?

파이썬에서 __new__는 객체와 관련된 속성입니다. dir() 함수를 사용하여 객체의 모든 속성을 확인할 수 있습니다. dir() 함수는 객체를 입력으로 받아 다음과 같이 모든 객체 속성 목록을 반환합니다.

class Car:
    def __init__(self, model, brand, price, country):
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country


myCar = Car("Tesla", "Cybertruck", 40000, "USA")
print(dir(myCar))

출력:

['Brand', 'Country', 'Model', 'Price', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

목록에 __new__ 속성이 있음을 알 수 있습니다.

Python에서 new 키워드를 사용하는 방법은 무엇입니까?

우리는 다른 프로그래밍 언어에서처럼 파이썬에서 명시적으로 new 키워드를 사용할 수 없습니다. 그러나 Python의 __new__ 속성은 다른 프로그래밍 언어의 new 키워드와 동일하게 작동합니다. __new__() 메서드는 기본 클래스 object에 정의되어 있으며 객체에 대한 스토리지를 할당하는 데 사용됩니다.

className() 구문을 사용하여 클래스 이름을 호출하여 새 객체를 생성하면 클래스의 __call__() 메서드가 실행됩니다. __call__() 메서드는 __new__() 메서드를 호출합니다. 여기에서 __new__() 메서드는 객체에 메모리를 할당하고 컨트롤을 __call__() 메서드에 반환합니다.

__call__() 메서드는 __init__() 메서드를 호출합니다. __init__() 메서드는 클래스 변수를 초기화하고 컨트롤을 __call__() 메서드로 반환합니다. __call__() 메서드는 실행을 끝내고 생성된 객체에 대한 참조를 우리에게 반환합니다.

__new__() 메서드를 어떻게 명시적으로 구현할 수 있습니까?

Python에서 __new__() 메서드를 명시적으로 구현할 필요가 없습니다. 그러나 __new__() 메서드와 __init__() 메서드가 실행되는 순서를 보고 싶다면 __new__() 메서드를 재정의할 수 있습니다. 위에서 보았듯이 __new__() 메서드는 정적 메서드이며 개체 클래스에 정의되어 있습니다. 클래스 이름을 사용하여 객체를 생성하면 __new__() 메서드가 자동으로 호출됩니다.

__new__() 메소드는 현재 클래스를 나타내는 cls 입력 인수를 사용합니다. 그런 다음 __new__() 메서드는 현재 클래스를 입력 인수로 사용하여 수퍼 클래스의 __new__() 메서드를 호출합니다. 이 프로세스는 기본 클래스 object에 도달할 때까지 계속되어야 합니다. 기본 클래스 object에서 __new__() 메서드가 실행되고 생성하려는 개체에 대한 저장소가 할당됩니다. 그런 다음 개체의 인스턴스가 생성됩니다. __new__() 메서드는 인스턴스를 반환한 후 __init__() 메서드를 사용하여 인스턴스의 변수를 초기화합니다.

다음 예에서 이 전체 프로세스를 관찰할 수 있습니다.

class Car:
    def __init__(self, brand, model, price, country):
        print("I am in the __init__() method.")
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country

    def __new__(cls, *args, **kwargs):
        print("I am in the __new__() method.")
        return super(Car, cls).__new__(cls)


myCar = Car("Tesla", "Cybertruck", 40000, "USA")

출력:

I am in the __new__() method.
I am in the __init__() method.

여기서 우리가 구현한 __new__() 메서드는 현재 클래스에 속하며 객체의 인스턴스가 생성되는 방식에는 영향을 미치지 않습니다. 이를 변경하려면 기본 클래스 object에서 __new__() 메서드를 변경해야 합니다. 그러나 우리는 그렇게 할 수 없으며 그러한 실험을 시도해서는 안됩니다. 또한 출력에서 ​​__new__() 메서드가 __init__() 메서드보다 먼저 실행되었는지 확인할 수 있습니다.

결론

이 기사에서 Python의 new 키워드에 대해 논의했습니다. 또한 dir() 메서드를 사용하여 클래스와 관련된 모든 속성을 얻는 방법도 보았습니다. 또한 Python에서 객체가 생성되는 방식과 __new__() 메서드가 작동하는 방식도 보았습니다. 우리는 또한 __new__() 메서드를 자체적으로 구현했습니다. 그러나 그다지 유용하지 않으며 스스로 __new__() 메서드를 구현하지 않는 것이 좋습니다.

작가: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

관련 문장 - Python Class