Python은 불필요한 객체(내장 유형 또는 클래스 인스턴스)를 자동으로 삭제하여 메모리 공간을 확보합니다. Python이 더 이상 사용하지 않는 메모리 블록을 주기적으로 해제하고 회수하는 프로세스를 Garbage Collection이라고 합니다. Python의 가비지 수집기는 프로그램 실행 중에 실행되며 개체의 참조 횟수가 0에 도달하면 트리거됩니다. 개체의 참조 횟수는 개체를 가리키는 별칭 수가 변경됨에 따라 변경됩니다. 객체의 참조 횟수는 새 이름이 지정되거나 컨테이너(목록, 튜플 또는 사전)에 배치될 때 증가합니다. 개체의
클래스의 상속 클래스를 새로 정의하는 대신 새 클래스 이름 뒤의 괄호 안에 부모 클래스를 나열하여 기존 클래스에서 파생하여 클래스를 만들 수 있습니다. 자식 클래스는 부모 클래스의 속성을 상속하며 이러한 속성을 자식 클래스에 정의된 것처럼 사용할 수 있습니다. 자식 클래스는 부모의 데이터 멤버와 메서드를 재정의할 수도 있습니다. 구문 파생 클래스는 부모 클래스와 매우 유사하게 선언됩니다. 그러나 상속받을 기본 클래스의 목록은 클래스 이름 다음에 제공됩니다 - class SubClassName (ParentClass1[, Par
다음과 같이 여러 상위 클래스에서 클래스를 파생할 수 있습니다. − class A:# 클래스 A 정의 .....class B:# 클래스 B 정의 .....class C(A, B):# A와 B의 서브클래스 ..... issubclass() 함수를 사용하여 두 클래스와 인스턴스의 관계를 확인할 수 있습니다. 예를 들어 issubclass(sub, sup) 부울 함수는 주어진 서브클래스 sub가 실제로 슈퍼클래스 sup의 서브클래스인 경우 true를 반환합니다.
다음과 같이 여러 상위 클래스에서 클래스를 파생할 수 있습니다. − class A:# 클래스 A 정의 .....class B:# 클래스 B 정의 .....class C(A, B):# A와 B의 서브클래스 ..... isinstance() 함수를 사용하여 두 클래스와 인스턴스의 관계를 확인할 수 있습니다. instance(obj, 클래스) 부울 함수는 obj가 클래스 클래스의 인스턴스이거나 클래스의 하위 클래스 인스턴스인 경우 true를 반환합니다.
다음과 같이 정의된 클래스 A와 B가 있습니다 - class A(object): pass class B(A): pass B는 다음과 같은 두 가지 방법으로 A의 하위 클래스임을 증명할 수 있습니다. class A(object):pass class B(A):pass print issubclass(B, A) # Here we use the issubclass() method to check if B is subclass of A print B.__bases__ # Here we check the base classes or super
다음과 같이 정의된 클래스 A와 B가 있습니다. - class A(object): pass class B(A): pass 예 A는 다음과 같은 두 가지 방법으로 B의 상위 클래스임을 증명할 수 있습니다. class A(object):pass class B(A):pass print issubclass(B, A) # Here we use the issubclass() method to check if B is subclass of A print B.__bases__ # Here we check the base classes or su
아래 코드는 foo 속성이 클래스 A와 B에서 정의 또는 파생되었는지 여부를 보여줍니다. 예시 class A: foo = 1 class B(A): pass print A.__dict__ #We see that the attribute foo is there in __dict__ of class A. So foo is defined in class A. print hasattr(A, 'foo') #We see that class A has the attribute but
객체 지향 프로그래밍은 프로젝트에서 코드 중복을 방지하기 위해 재사용 가능한 코드 패턴을 생성합니다. 재활용 가능한 코드가 생성되는 한 가지 방법은 상속을 통해 하나의 하위 클래스가 다른 기본 클래스의 코드를 활용할 때입니다. 상속은 클래스가 다른 클래스 내에서 작성된 코드를 사용하는 경우입니다. 자식 클래스 또는 하위 클래스라고 하는 클래스는 부모 클래스 또는 기본 클래스에서 메서드와 변수를 상속합니다. Child 하위 클래스는 Parent 기본 클래스에서 상속되기 때문에 Child 클래스는 Parent의 코드를 재사용할 수
초기화를 위해 상위 클래스를 호출하는 약간 더 나은 방법인 Python 내장 함수인 super를 사용합니다. 다음 코드는 super의 사용을 보여줍니다. 예시 # Initializing using just Parent class MySubClass(MySuperClass): def __init__(self): MySuperClass.__init__(self) # Initializing using Parent with super(). class MySubCla
메소드 오버로딩은 동일한 이름을 가진 두 개의 메소드를 갖는 것을 의미합니다. 파이썬에서는 같은 이름을 가진 두 개의 메서드를 가질 수 없으며 그럴 필요도 없습니다. Python에서는 메서드 오버로딩이 불가능합니다. 같은 기능에 다른 기능으로 접근하고 싶다면 메소드 오버라이딩으로 가는 것이 좋다.
재정의는 기본 클래스 중 하나에서 제공하는 메서드의 구현을 변경하기 위한 클래스의 속성입니다. 재정의는 상속이 모든 권한을 활용하게 하기 때문에 OOP에서 매우 중요한 부분입니다. 클래스를 재정의하는 메서드를 사용하면 다른 클래스를 복사하여 코드 중복을 방지하고 동시에 해당 클래스의 일부를 향상하거나 사용자 지정할 수 있습니다. 따라서 메서드 재정의는 상속 메커니즘의 일부입니다. 파이썬에서 메서드 재정의는 부모 클래스의 메서드와 동일한 이름을 가진 메서드를 자식 클래스에 정의하기만 하면 발생합니다. 개체에서 메서드를 정의할 때 후
__init__ __init__은 파이썬 클래스에서 예약된 메서드입니다. OOP 개념에서는 생성자로 알려져 있습니다. 이 메서드는 클래스에서 객체가 생성될 때 호출되며 클래스가 클래스의 속성을 초기화할 수 있도록 합니다. __init__을(를) 어떻게 사용합니까? Car라는 클래스를 생성한다고 가정해 보겠습니다. 자동차는 색상, 모델, 속도 등과 같은 속성과 시작, 가속, 기어 변경 등과 같은 메서드를 가질 수 있습니다. 예시 class Car(object): def __init__
__del__() 메서드는 소멸자 메서드로 알려져 있습니다. 개체에 대한 모든 참조가 삭제된 후에 발생하는 개체가 가비지 수집될 때 호출됩니다. 간단한 경우 이는 del x와 같은 변수를 삭제한 직후 또는 x가 로컬 변수인 경우 함수가 종료된 직후일 수 있습니다. 특히 순환 참조가 없는 한 표준 Python 구현인 CPython은 즉시 가비지 수집됩니다. Python 가비지 수집의 유일한 속성은 모든 참조가 삭제된 후에 발생한다는 것이므로 이것이 반드시 바로 발생하지 않을 수도 있고 전혀 발생하지 않을 수도 있습니다. 더욱이
공식 Python 문서에 따르면 __repr__()은 객체의 공식 문자열 표현을 계산하는 데 사용됩니다. repr() 내장 함수는 __repr__()을 사용하여 객체를 표시합니다. __repr__()은 이 객체를 생성할 수 있는 방법 중 하나인 객체의 인쇄 가능한 표현을 반환합니다. __repr__()은 개발자에게 더 유용하고 __str__()은 최종 사용자를 위한 것입니다. 예시 다음 코드는 __repr__()이 사용되는 방법을 보여줍니다. class Point: def __init__(self, x, y
__str__ 메소드 __str__은 __init__과 같은 특수 메서드로, 객체의 비공식 문자열 표현을 반환합니다. 디버깅에 유용합니다. __str__ 메서드를 사용하는 다음 코드를 고려하세요. class Time: def __str__(self): return '%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second) 객체를 인쇄할 때 Python은 str 메서드를 호출합니다 - >>&
cmp() 함수 cmp(x,y) 함수는 두 인수 x와 y의 값을 비교합니다 - cmp(x, y) 반환 값은 - x가 y보다 작으면 음수입니다. x가 y와 같으면 0입니다. x가 y보다 크면 양수입니다. 내장 cmp() 함수는 일반적으로 -1, 0 또는 1 값만 반환합니다. 그러나 호출 순서가 동일한 함수가 필요한 다른 위치가 있으며 이러한 함수는 다른 값을 반환할 수 있습니다. 결과의 부호만 관찰하는 것이 가장 좋습니다. cmp(stackexchange, stackoverflow)-1 cmp() 메서드는 두 목록의 요
공식 Python 문서에 따르면 __repr__은 객체의 공식 문자열 표현을 찾는 데 사용되고 __str__은 개체의 비공식 문자열 표현을 찾는 데 사용됩니다. print 문과 str() 내장 함수는 __str__을 사용하여 객체의 문자열 표현을 표시하는 반면 repr() 내장 함수는 __repr__을 사용하여 객체를 표시합니다. 두 가지 방법이 실제로 무엇을 하는지 이해하기 위해 예를 들어 보겠습니다. 날짜/시간 개체를 만들어 보겠습니다. − >>> import datetime >>> today =
Python 클래스는 객체 지향 프로그래밍 패러다임의 모든 표준 기능을 제공합니다. 클래스 상속 메커니즘은 여러 기본 클래스를 허용합니다. 파생 클래스는 기본 클래스의 모든 메서드를 재정의할 수 있으며 메서드는 동일한 이름을 가진 기본 클래스의 메서드를 호출할 수 있습니다.
숫자를 추가하고 동시에 문자열을 연결하는 데 + 연산자를 사용할 수 있다는 것을 알고 있습니다. 이것은 + 연산자가 int 클래스와 str 클래스 모두에 의해 오버로드되기 때문에 가능합니다. 연산자는 기본적으로 각 클래스에 정의된 메소드입니다. 연산자에 대한 메서드를 정의하는 것을 연산자 오버로딩이라고 합니다. 예를 들어 사용자 정의 개체와 함께 + 연산자를 사용하려면 __add__ 라는 메서드를 정의해야 합니다. 예시 다음 코드를 사용하면 연산자 오버로딩이 작동하는 방식을 쉽게 이해할 수 있습니다. import math clas
Python 문서에 따르면 데이터 은닉은 구현(일부)에서 클라이언트를 격리하는 것입니다. 모듈의 일부 개체는 모듈 내부에 있을 수 있으며 사용자가 볼 수 없고 액세스할 수 없습니다. 이처럼 종속성을 피함과 동시에 보안을 제공하는 방법이다. 응용 프로그램의 사용자는 응용 프로그램을 사용하는 방법을 알 수 있지만 응용 프로그램이 어떻게 작동하는지 알 필요는 없습니다. 사실 그럴 필요가 없습니다. 애플리케이션의 특정 사용자에 대한 액세스를 방지하는 이러한 방법을 데이터 숨김이라고 합니다.