>백엔드 개발 >파이썬 튜토리얼 >Python 객체 지향 클래스 및 예제

Python 객체 지향 클래스 및 예제

不言
不言원래의
2018-04-14 10:16:331805검색

이 글에서 공유한 내용은 Python 객체지향 클래스와 예제에 대한 것입니다. 필요한 참조 가치가 있습니다.

클래스 및 인스턴스


객체지향의 가장 중요한 개념입니다. 클래스(Class)와 인스턴스(Instance)가 있는데, 클래스는 Student 클래스와 같은 추상 템플릿이고, 인스턴스는 클래스를 기반으로 생성된 특정 "객체"라는 점을 기억해야 합니다. 각 객체는 동일한 메소드를 갖습니다. , 그러나 자체 데이터는 다를 수 있습니다.

Student 클래스를 예로 들면 Python에서 클래스 정의는 클래스 키워드를 통해 이루어집니다.

class Student(object):
   pass

class 뒤에는 클래스 이름이 옵니다. 클래스 이름은 일반적으로 대문자로 시작하는 단어입니다. 상속의 개념에 대해서는 나중에 설명하겠습니다. 일반적으로 적절한 상속 클래스가 없으면 결국 모든 클래스가 사용하게 되는 클래스입니다. 상속.

Student 클래스를 정의한 후 Student 클래스를 기반으로 Student 인스턴스를 생성할 수 있습니다. 인스턴스 생성은 클래스 이름 + ()를 통해 수행됩니다.

class Student(object):
   pass

bart = Student()
print(bart)
print(Student)
<__main__.Student object at 0x000001A9412A47B8>
<class &#39;__main__.Student&#39;>

bart 변수가 Student 인스턴스를 가리키는 것을 볼 수 있습니다. , 그리고 다음 0x000001A9412A47B8은 메모리 주소입니다. 각 개체의 주소는 다르며 Student 자체는 클래스입니다.

속성을 인스턴스 변수에 자유롭게 바인딩할 수 있습니다. 예를 들어 이름 속성을 인스턴스 bart에 바인딩할 수 있습니다.

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))

bart = Student(&#39;Boyuan Zhou&#39;,100)
lisa = Student(&#39;Maomao&#39;,100)
bart.name= &#39;jeff&#39;
print(bart.name)
jeff

클래스는 템플릿 역할을 할 수 있으므로 인스턴스를 생성할 때 일부 속성을 추가할 수 있습니다. 우리가 묶여 있어야 한다고 생각하는 부분은 필수로 채워야 합니다. 특별한 __init__ 메소드를 정의함으로써 인스턴스를 생성할 때 이름, 점수 및 기타 속성이 여기에 연결됩니다.

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score

__init__ 메소드의 첫 번째 매개변수는 항상 생성된 인스턴스 자체를 나타내는 self입니다. __init__ 메소드 내에서 self는 생성된 인스턴스 자체를 가리키기 때문에 다양한 속성을 self에 바인딩할 수 있습니다.

__init__ 메서드를 사용하면 인스턴스를 생성할 때 빈 매개변수를 전달할 수 없습니다. __init__ 메서드와 일치하는 매개변수를 전달해야 하지만 self는 인스턴스 변수에 전달될 필요가 없습니다. 전달:

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))

bart = Student(&#39;Boyuan Zhou&#39;,100)
lisa = Student(&#39;Maomao&#39;,100)
bart.name= &#39;jeff&#39;
print(bart.name)
print(bart.score)
jeff
100

일반 함수와 비교하여 클래스에 정의된 함수의 유일한 차이점은 첫 번째 매개변수가 항상 인스턴스 변수 self이고 호출 시 이 매개변수를 전달할 필요가 없다는 것입니다. 그 외에 클래스 메소드는 일반 함수와 다르지 않으므로 기본 매개변수, 변수 매개변수, 키워드 매개변수, 명명된 키워드 매개변수를 계속 사용할 수 있습니다.

데이터 캡슐화

객체 지향 프로그래밍의 중요한 기능은 데이터 캡슐화입니다. 위의 Student 클래스에서 각 인스턴스에는 고유한 이름과 점수 데이터가 있습니다. 학생 점수 인쇄와 같은 기능을 통해 이 데이터에 액세스할 수 있습니다.

>>> std1 = {&#39;name&#39;:&#39;jeff&#39;,&#39;score&#39;:100}
>>> std2 = {&#39;name&#39;:&#39;xin&#39;,&#39;score&#39;:0}
>>> def print_score(std):
...     print(&#39;%s:%s&#39;%(std[&#39;name&#39;],std[&#39;score&#39;]))
...
>>> print_score(std1)
jeff:100
>>> print_score(std2)
xin:0

그러나 Student 인스턴스 자체가 이 데이터를 소유하므로 외부 함수에서 이 데이터에 액세스할 필요가 없습니다. Student 클래스 함수에서 직접 액세스할 수 있습니다. 데이터에 액세스하는 방법은 내부적으로 정의되어 "데이터"를 캡슐화합니다. 데이터를 캡슐화하는 이러한 함수는 Student 클래스 자체와 연결되어 있습니다. 우리는 이를 클래스의 메서드라고 부릅니다.

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))

메서드를 정의하려면 첫 번째 매개 변수가 self라는 점을 제외하고 나머지는 일반 함수와 동일합니다. 메소드를 호출하려면 인스턴스 변수에서 직접 호출하기만 하면 됩니다. self를 제외하고는 다른 매개변수가 정상적으로 전달됩니다.

bart.print_score()
jeff:100

이렇게 하면 Student 클래스를 볼 수 있습니다. 외부에서는 인스턴스와 점수를 생성하기 위해 이름을 지정해야 하며 인쇄 방법은 모두 Student 클래스에 의해 내부적으로 정의되어 있으며 호출하기 쉽습니다. , 그러나 내부 구현의 세부 사항을 알 필요는 없습니다.

캡슐화의 또 다른 이점은 get_grade:

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))
    def get_grade(self):
        if self.score >=90:
            return 'A'
        elif self.score>=600:
            return  'B'
        else:
            return  'C'
bart = Student('Boyuan Zhou',100)
lisa = Student('Maomao',100)
bart.name= 'jeff'
bart.print_score()

print(bart.get_grade())
jeff:100
A

와 같은 Student 클래스에 새로운 메서드를 추가할 수 있다는 것입니다. 관련 권장 사항:

Python 객체 지향 샘플 코드 정보


위 내용은 Python 객체 지향 클래스 및 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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