>백엔드 개발 >파이썬 튜토리얼 >Python에서 클래스와 인스턴스 간에 속성과 메서드를 바인딩하는 방법에 대한 코드 예제

Python에서 클래스와 인스턴스 간에 속성과 메서드를 바인딩하는 방법에 대한 코드 예제

黄舟
黄舟원래의
2017-08-20 10:54:021668검색

저는 최근 순수하게 취미로 파이썬을 배우고 있습니다. 하지만 위의 설명이 너무 번거롭다고 느껴서 아래의 글을 주로 소개하고 있습니다. 클래스와 인스턴스 간 속성과 메서드를 바인딩하는 방법에 대한 정보가 필요한 친구는 참고하면 됩니다.

머리말

파이썬 클래스와 인스턴스의 메소드를 호출할 때 헷갈리는 부분을 생각해보고, 이해를 깊게 하고 기억을 정리하고, 파이썬을 배우려는 분들에게 도움이 되도록 기록하겠습니다. 친구들은 이 추상 언어를 이해합니다. Python은 동적 언어이므로 클래스를 기반으로 생성된 클래스와 인스턴스는 아래에 소개된 속성과 메서드에 임의로 바인딩될 수 있습니다.

1. 클래스 바인딩 속성

클래스 바인딩 속성은 일반 속성인 클래스에서 직접 정의할 수 있습니다.


 class Student(object):
  name = 'Student'

이 속성은 All로 분류되지만 클래스의 모든 인스턴스에서 액세스할 수 있습니다.


class Student(object):
 name = 'Student'
s = Student() # 创建实例s
print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
print(Student.name) # 打印类的name属性
Student
Student

이때 s.name 값을 수정하면 다음과 같은 결과가 나옵니다.


s.name = 'xiaoming' # 给实例绑定name属性
print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
xiaoming
Student

다음으로 s.name 속성을 삭제합니다.


del s.name # 如果删除实例的name属性
print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student

될 수 있습니다. 동일한 이름의 인스턴스 속성이 클래스 속성을 재정의하고, 인스턴스 속성을 삭제한 후 인스턴스는 상위 클래스 속성에 액세스하는 것을 확인했습니다.

2. 인스턴스 바인딩 속성

속성을 인스턴스에 바인딩하는 방법에는 두 가지가 있습니다. 하나는 클래스의 자체 변수를 통하는 것이고, 다른 하나는 인스턴스에 직접 값을 할당하는 것입니다.


class Student(object):
 def __init__(self, name):
  self.name = name
s = Student('Bob')#方法一 通过类的self变量绑定属性
s.score = 90#方法二 直接赋值

3. 클래스 바인딩 방법

클래스 바인딩 방법에는 두 가지 유형이 있으며, 첫 번째는 클래스 바인딩 속성의 형태이며, 루틴은 다음과 같습니다.


Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

Student.set_score=set_score#类绑定方法
a.set_score(99)#调用方法
a.score
99#输出

두 번째는 MethodType을 사용하여 클래스에 메서드를 바인딩하는 것입니다.


Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

from types import MethodType
Student.set_score = MethodType(set_score, Student)

a.set_score(99)#调用方法
a.score
99#输出

이 메서드에 대해 주의할 점이 한 가지 있습니다. 인스턴스 b를 계속 생성하면


b=Student()
b.set_score(60)
b.score
a.score
60

을 찾을 수 있습니다. a의 속성 점수 값도 60이 된다는 것입니다. 여기서 개인적인 이해는 여기의 점수가 이전 방법처럼 클래스에 직접 바인딩되지 않고 목록과 같은 공유 참조 관계와 유사하다는 것입니다. 즉, 인스턴스 a와 b 모두 이 점수를 자신의 속성으로 참조합니다. 수정되면 이를 참조하는 모든 인스턴스의 해당 속성이 함께 변경됩니다.

4. 인스턴스 바인딩 방법 첫 번째 방법은 위와 같이 인스턴스에서 호출할 수 있는 클래스에 메서드를 바인딩하는 것입니다.

두 번째는 MethodType을 사용하여 메서드를 단일 인스턴스에 바인딩하는 것입니다.

Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

from types import MethodType
a.set_score = MethodType(set_score, a)

a.set_score(99)#调用方法
a.score
99#输出

이 메서드는 a 인스턴스에서만 작동합니다. Studnet 클래스의 모든 인스턴스를 호출 가능하게 하려면 해당 메서드를 Student 클래스에 직접 바인딩하세요.

요약

위 내용은 Python에서 클래스와 인스턴스 간에 속성과 메서드를 바인딩하는 방법에 대한 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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