Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 인스턴스 간에 공유되는 클래스 데이터 피하기

<시간/>

Python에서 클래스를 인스턴스화할 때 모든 변수와 함수도 인스턴스화된 새 클래스로 상속됩니다. 그러나 부모 클래스의 일부 변수가 자식 클래스에 상속되는 것을 원하지 않는 경우가 있을 수 있습니다. 이 기사에서는 이를 수행하는 두 가지 방법을 살펴보겠습니다.

인스턴스화 예

아래 예에서 우리는 주어진 클래스에서 인스턴스가 가열되는 방식과 인스턴스화된 모든 클래스에서 변수가 공유되는 방식을 보여줍니다.

class MyClass:listA=[]# 두 클래스 모두 인스턴스화x =MyClass()y =MyClass()# 두 클래스 모두 조작x.listA.append(10)y.listA.append(20)x.listA.append( 30)y.listA.append(40)# Print Resultsprint("인스턴스 X:",x.listA)print("인스턴스 Y:",y.listA)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

인스턴스 X:[10, 20, 30, 40]인스턴스 Y:[10, 20, 30, 40]

__inti__가 있는 개인 클래스 변수

I need 메소드를 사용하여 클래스 내부의 변수를 비공개로 만들 수 있습니다. 이러한 변수는 상위 클래스가 인스턴스화될 때 클래스 간에 공유되지 않습니다.

class MyClass:def __init__(self):self.listA =[]# 두 클래스 모두 인스턴스화x =MyClass()y =MyClass()# 두 클래스 모두 조작x.listA.append(10)y.listA.append( 20)x.listA.append(30)y.listA.append(40)# Print Resultsprint("인스턴스 X:",x.listA)print("인스턴스 Y:",y.listA)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

인스턴스 X:[10, 30]인스턴스 Y:[20, 40]

외부에서 변수 선언

이 접근 방식에서는 클래스 외부에서 변수를 다시 선언합니다. 인스턴스화된 클래스 간에 공유되지 않는 변수가 다시 초기화되기 때문입니다.

class MyClass:listA =[]# 두 클래스를 모두 인스턴스화합니다.x =MyClass()y =MyClass()x.listA =[]y.listA =[]# 두 클래스를 조작합니다.x.listA.append(10)y. listA.append(20)x.listA.append(30)y.listA.append(40)# 결과 인쇄print("인스턴스 X:",x.listA)print("인스턴스 Y:",y.listA)출력 

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

인스턴스 X:[10, 30]인스턴스 Y:[20, 40]