파이썬관련정보

파이썬코드 INHERITANCE

우리는 기능에서의 상속과 같은 장 앞부분에서 이야기했습니다. 그것은 무엇이고 왜 중요한가? 먼저 함수, 변수, 수업 만들기 측면에서 지금까지 우리가 해왔던 것을 다시 한 번 살펴봅시다.

앞에서 다양한 변수와 함수를 그룹화할 수 있는 방법을 살펴보았습니다. 이를 통해 데이터와 처리 코드가 동일한 지점에 존재하여 단일 지점에서 코드를 가로질러 실행하는 것이 더 쉬워진다. 이제 클래스에 부여한 속성(변수)과 데이터(함수)를 처리하는 데 사용할 수 있는 메서드를 통해 새로 생성하는 모든 개체에 대해 새 코드를 작성하지 않고도 해당 클래스의 수많은 인스턴스를 만들 수 있습니다.

데이터베이스에서 발생하는 문제를 충족시키려면 어떻게 해야 할까요? 추가 기능이 있는 도형을 상상해 보십시오. 원래 클래스와 공통적인 특징을 공유하지만 원래 클래스가 처리할 수 없는 추가 특징을 가진 도형을 상상해 보십시오.

차이를 해결하기 위해 새 코드를 만드는 것은 올바른 방법이 아닙니다. 여기서 이상적인 클래스의 모든 속성을 상속하는 자식 클래스를 만드는 동시에 고유한 새 기능을 추가합니다.

여기서 상속이 시작되고 파이썬은 매우 쉽게 구현할 수 있습니다.

어떻게 하는 겁니까?

기존 클래스를 '부모' 클래스로 사용하여 새 클래스를 정의합니다. 따라서 자식 클래스는 부모 클래스에서 모든 것을 가져가는 동시에 새로운 특징과 특성 및 메서드를 추가할 수 있습니다.

new_shape 클래스를 기반으로 빌드합니다.

 

Here’s an example class new_shape: 

def __init__(self, x, y):
self.x = x
self.y = y
shape_details = “This is an undescribed shape” creator = “No one lays claim to creating this shape “ def creatorName(self,text): 

self.creator = text
def detail(self,text): self.shape_details = text 

def perimeter(self): 

return 2 * self.x + 2 * self.y def area(self): 

return self.x * self.y
def scaleSize(self,scale): self.x = self.x * scale self.y = self.y * scale 

이제 정사각형도 직사각형의 한 형태로 여겨지지만, 가로와 세로는 서로 같습니다. 기존 new_shape 클래스를 사용하여 새 클래스를 정의하려는 경우 코드는 다음과 같습니다.

 

class square(new_shape): def __init__(self,x): self.x = x
self.y = x 

이는 상속해야 하는 매개 변수 집합으로 부모 클래스를 사용했다는 점을 제외하면 new_shape 클래스를 정의한 방법과 매우 유사합니다. 코드를 재정의하고 별도로 작성할 필요 없이 이 새로운 개체를 만족시키는 것이 얼마나 쉬운지 보십시오.

우리는 바뀌어야 할 것만 바꾸고 나머지는 빌렸다. 높이와 너비(x와 y)가 같도록 new_shape의 __init__ 함수를 재정의했을 뿐이다. 그러나 자식 클래스에 정의된 새 변수는 new_shape에 있는 변수를 덮어쓰지 않습니다.

이제, 정사각형 자체가 새로운 클래스가 되었고 우리는 또 다른 클래스를 만드는 데 사용할 수 있습니다! 여기 패턴이 보이나요? 이것은 레고 퍼즐과 같습니다. 여러분은 물체를 만들고 그것들을 벽돌로 사용하여 더 좋고 복잡한 물체들과 프로그램들을 만듭니다.

두 개의 정사각형을 만들어 두 개의 정사각형을 나란히 만들어 봅시다.

 

class 2square(Square): def __init__(self,y): self.y = y
self.x = 2 * y 

def perimeter(self): 

return 2 * self.x + 3 * self.y 

이번에는 코드에 추가적인 방법(함수)도 있습니다. 사각형에 새 모양이 상속된 것은 이 새 클래스의 요구를 충족할 수 없기 때문에 둘레 함수를 재정의했습니다.

2제곱의 인스턴스(instance)를 만드는 경우 이중 제곱은 모두 정사각형 또는 new_형이 아닌 2제곱 클래스에 의해 정의된 속성과 속성이 동일합니다.

 

클래스 포인터 및 사전

이전에 변수 스와핑의 작동 방식을 살펴보았습니다. 예를 들어 var1=var2는 왼쪽 변수를 오른쪽 변수에 저장된 값과 교환합니다.

클래스 인스턴스를 만들 때는 그렇지 않습니다. instance1=not2를 쓰면 실제로 첫 번째 클래스가 오른쪽 클래스를 가리키게 됩니다. "지시"는 두 인스턴스 이름이 모두 동일한 클래스 인스턴스를 참조하고 동일한 클래스 인스턴스를 두 이름 중 하나에서 사용할 수 있음을 의미합니다.

이것은 우리에게 수업의 사전을 가져다 준다.

포인터가 작동하는 방식을 기반으로 파이썬을 사용하면 목록이나 사전의 항목에 클래스 인스턴스를 쉽게 할당할 수 있습니다. 하지만 왜 그럴까요? 무슨 이득이 있나요?

이를 통해 프로그램에서 실행할 클래스 인스턴스를 거의 무제한으로 만들 수 있습니다. 다음은 포인터를 사용하여 사전 인스턴스를 만드는 예입니다. new_shape의 원래 정의와 사각형 및 2sqaure 클래스가 실행되었다고 가정할 때:

 

#Create a dictionary:
dictionary = {}
#Next, create some instances of classes in the dictionary: dictionary[“2square 1”] = 2square(5)
dictionary[“long rectangle”] = new_shape(100,30)
Now you can use them like normal classes! dictionary[“2square 1”].creatorName(“Python Coder”) print dictionary[“2square 1”].author 

print dictionary[“long rectangle”].area() 

이제 새 사전 항목을 만들어 우리가 만든 이전 이름을 더 나은 이름으로 바꾸셨습니다.