>  기사  >  백엔드 개발  >  파이썬 클래스 변수와 인스턴스 변수

파이썬 클래스 변수와 인스턴스 변수

(*-*)浩
(*-*)浩원래의
2019-10-31 10:56:264214검색

클래스에 정의된 속성이나 메서드에 관계없이 클래스 외부에서 직접 호출할 수 없다는 것을 알고 있습니다. 따라서 클래스를 완전히 독립적인 범위(클래스 네임스페이스라고 함)로 간주하면 클래스 속성은 실제로 정의된 변수입니다. 클래스 네임스페이스에서(클래스 메서드는 실제로 클래스 네임스페이스에 정의된 함수입니다)

파이썬 클래스 변수와 인스턴스 변수

속성이 정의되는 위치에 따라 클래스 속성은 클래스 속성(이후 클래스 변수로 표시)과 인스턴스 속성(후속 인스턴스 변수로 표시)으로 나눌 수 있습니다.

클래스 변수(클래스 속성) (추천 학습: Python 동영상 튜토리얼)

클래스 변수는 클래스 내에 정의되어 있지만 각 클래스 메서드 외부에 정의된 변수를 참조합니다. 클래스 변수의 특징은 클래스의 인스턴스화된 모든 객체가 클래스 변수의 값을 공유할 수 있다는 것입니다. 즉, 클래스 변수는 인스턴스화된 모든 객체에서 공용 리소스로 사용될 수 있습니다.

클래스 변수는 클래스 이름을 사용하여 직접 액세스하는 것이 좋지만 객체 이름을 사용하여 액세스할 수도 있습니다.

예를 들어 다음 코드는 Address 클래스를 정의하고 클래스에 대한 여러 클래스 특성을 정의합니다.

class Address :
    detail = '广州'
    post_code = '510660'
    def info (self):
        # 尝试直接访问类变量
        #print(detail) # 报错
        # 通过类来访问类变量
        print(Address.detail) # 输出 广州
        print(Address.post_code) # 输出 510660
#创建 2 个类对象
addr1 = Address()
addr1.info()
addr2 = Address()
addr2.info()
# 修改Address类的类变量
Address.detail = '佛山'
Address.post_code = '460110'
addr1.info()
addr2.info()

이 프로그램에서 두 번째와 세 번째 코드 줄은 Address에 대해 두 개의 클래스 변수를 정의합니다. 두 개의 클래스 변수를 출력하기 위해 프로그램에서 Address 객체의 info() 메서드를 처음 호출하면 두 클래스 변수의 초기값이 출력됩니다. 다음으로 프로그램은 Address 클래스를 통해 두 클래스 변수의 값을 수정하므로 프로그램이 두 번째로 info() 메서드를 통해 두 클래스 변수를 출력하면 수정된 두 클래스 변수의 값은 출력됩니다.

위 코드를 실행하면 다음 출력이 표시됩니다.

广州
510660
广州
510660
佛山
460110
佛山
460110

출력에서 ​​addr1과 addr2가 클래스 변수를 공유하는 것을 볼 수 있습니다. 즉, 클래스 변수의 값을 변경하면 클래스의 인스턴스화된 모든 개체에 영향을 미칩니다. .

인스턴스 변수는 클래스의 메소드에 정의된 속성을 참조하며, 그 특징은 메소드를 호출하는 객체에만 작용한다는 것입니다.

인스턴스 변수는 객체 이름을 통해서만 접근할 수 있고 클래스 이름을 통해서는 직접 접근할 수 없다는 점에 유의하세요.

Python에서는 객체를 통해 클래스 변수에 액세스할 수 있지만 클래스 변수의 값은 객체를 통해 수정할 수 없습니다. 객체를 통해 클래스 변수의 값을 수정하는 것은 "클래스 변수에 값을 할당하는 것"이 ​​아니라 새로운 인스턴스 변수를 정의하는 것이기 때문입니다.

예를 들어 다음 프로그램은

class Inventory:
    # 定义两个类变量
    item = '鼠标'
    quantity = 2000
    # 定义实例方法
    def change(self, item, quantity):
        # 下面赋值语句不是对类变量赋值,而是定义新的实例变量
        self.item = item
        self.quantity = quantity
# 创建Inventory对象
iv = Inventory()
iv.change('显示器', 500)
# 访问iv的item和quantity实例变量
print(iv.item) # 显示器
print(iv.quantity) # 500
# 访问Inventory的item和quantity类变量
print(Inventory.item) # 鼠标
print(Inventory.quantity) # 2000

위 프로그램에서 8번째와 9번째 코드는 예제를 통해 아이템과 수량 변수에 값을 할당하는 것처럼 보이지만, 그렇지 않습니다. 해당 기능은 다음과 같습니다. Re- 두 개의 인스턴스 변수가 정의됩니다.

클래스에서는 인스턴스 변수와 클래스 변수가 같은 이름을 가질 수 있지만, 이 경우 클래스 객체를 사용하면 인스턴스 변수를 선호하므로 클래스 변수를 호출할 수 없으므로 권장하지 않습니다." 개체 이름을 사용하여 클래스 변수를 호출합니다." 이유.

Inventory 객체의change() 메소드를 호출한 후 위 프로그램은 Inventory 객체의 item 및 amount 변수에 액세스합니다. 객체 자체에 이 두 가지 인스턴스 변수가 있으므로 프로그램은 Inventory 객체의 인스턴스 변수 값을 출력합니다. 그런 다음 프로그램은 Inventory를 통해 항목 및 수량 클래스 변수에 액세스합니다.

위 프로그램을 실행하면 다음과 같은 출력이 표시됩니다.

显示器
500
鼠标
2000

위 내용은 파이썬 클래스 변수와 인스턴스 변수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.