파이썬에서 첫 글자가 대문자인 이름은 클래스를 의미합니다. 이 클래스 정의의 대괄호는 공백에서 이 클래스를 생성하기 때문에 비어 있습니다. 우리는 이 클래스의 기능을 설명하는 독스트링을 작성했습니다. 클래스의 함수를 메서드라고 합니다.
Student 클래스를 예로 들어 보겠습니다. Python에서 클래스 정의는 class 키워드를 통해 이루어집니다.
class Student(객체): pass |
클래스 뒤에는 즉, Student의 경우 클래스 이름은 일반적으로 대문자로 시작하고 그 뒤에 (object)가 오는 단어로 구성되며 일반적으로 적합한 상속 클래스가 없는 경우 객체 클래스를 사용합니다. 이것이 결국 상속된 클래스가 수행하는 작업입니다.
class 학생(객체): def __init__(self, name, Score): self.name = name self.score = 점수 |
1. __init__() 메서드는 특별한 메서드입니다. Python은 새 인스턴스가 생성될 때 자동으로 실행합니다. 시작과 끝에 두 개의 밑줄이 있습니다. 이는 Python 기본 메서드와 일반 메서드 간의 이름 충돌을 피하기 위해 고안된 규칙입니다. 이 방법의 정의에서 형식 매개변수 self는 필수이며 다른 형식 매개변수 앞에 위치해야 합니다.
2. 클래스와 연결된 각 메서드 호출은 인스턴스 자체에 대한 참조인 실제 매개변수 self를 자동으로 전달하여 인스턴스가 클래스의 속성과 메서드에 액세스할 수 있도록 합니다. self는 자동으로 전달되므로 전달할 필요가 없습니다.
3. self 접두사가 붙은 변수는 클래스의 모든 메서드에서 사용할 수 있으며 클래스의 모든 인스턴스를 통해 이러한 변수에 액세스할 수도 있습니다.
4.self.name= name 이와 같이 인스턴스를 통해 접근할 수 있는 변수를 속성이라고 합니다
5. 객체지향 프로그래밍의 중요한 특징은 데이터 캡슐화입니다. 클래스 내부의 데이터에 액세스하기 위한 함수를 직접 정의하여 "데이터"를 캡슐화할 수 있습니다. 이러한 데이터를 캡슐화하는 함수는 Student 클래스 자체와 연결되어 있으며, 이를 클래스의 메서드라고 합니다.
일반적으로 대문자(예: Dog)가 포함된 이름을 다음과 같이 생각할 수 있습니다. 참조하는 것은 클래스를 참조하는 반면 소문자 이름(예: my_dog)은 클래스에서 생성된 인스턴스를 참조합니다.
1. 인스턴스의 속성에 액세스하려면 마침표 표기를 사용할 수 있습니다. my_dog의 속성 이름 값에 액세스하기 위해 다음 코드를 작성했습니다.
my_dog.name
기간 표기법은 Python에서 매우 일반적으로 사용됩니다. 이 구문은 Python이 속성 값을 학습하는 방법을 보여줍니다.
2. Dog 클래스를 기반으로 인스턴스를 생성한 후 마침표 표기법을 사용하여 Dog 클래스에 정의된 모든 메서드를 호출할 수 있습니다.
3. 필요에 따라 클래스를 기반으로 인스턴스를 얼마든지 생성할 수 있습니다.
1. 수행해야 할 중요한 작업은 인스턴스의 속성을 수정하는 것입니다. 인스턴스의 속성을 직접 수정하거나 메서드를 작성하여 특정 방식으로 수정할 수 있습니다.
2. 클래스는 인스턴스를 생성하기 위한 템플릿이며, 인스턴스는 특정 객체입니다. 각 인스턴스가 소유하는 데이터는 서로 독립적이며 서로 영향을 미치지 않습니다. 인스턴스에서 메소드를 호출하여 인스턴스의 데이터에 직접 액세스하고 객체 내부의 데이터를 직접 조작하지만 메소드 내부의 구현 세부 사항을 알 필요는 없습니다. 정적 언어와 달리 Python에서는 모든 데이터를 인스턴스 변수에 바인딩할 수 있습니다. 즉, 두 인스턴스 변수의 경우 동일한 클래스의 다른 인스턴스이더라도 변수 이름이 다를 수 있습니다.
클래스의 모든 속성은 값이 0이거나 빈 문자열인 경우에도 초기 값을 가져야 합니다. 기본값을 설정할 때와 같은 일부 경우에는 __init__() 메서드 내에서 이러한 초기 값을 지정할 수 있습니다. 속성에 대해 이 작업을 수행하면 초기 값을 제공하는 형식 매개변수를 포함할 필요가 없습니다. 값.
클래스 속성인 속성을 클래스에서 직접 정의합니다.
class Student(객체): name = 'Student' |
프로그램을 작성할 때 인스턴스 속성과 클래스 속성에 동일한 이름을 사용하지 마십시오. 동일한 이름을 가진 인스턴스 속성은 클래스 속성을 차단하기 때문입니다. 그러나 인스턴스 속성을 삭제하고 동일한 이름을 다시 사용하면 다음과 같은 문제가 발생할 수 있습니다. 액세스는 클래스 속성이 됩니다.
속성 값은 세 가지 방법으로 수정할 수 있습니다:
1. 인스턴스를 통해 직접 수정
2. 메소드를 통해 설정
3. 증분 (특정 값을 증가시키는) 방법을 통해.
1. 클래스 내부에는 속성과 메소드가 있을 수 있으며, 외부 코드는 인스턴스 변수 메소드를 직접 호출하여 데이터를 조작할 수 있어 복잡한 내부 로직을 숨길 수 있습니다.
2. 내부 속성이 외부에서 접근되는 것을 방지하려면 속성 이름 앞에 밑줄 __ 두 개를 추가하면 됩니다. Python에서는 인스턴스의 변수 이름이 __로 시작하면 프라이빗 변수(private)가 됩니다. ) 내부에서만 액세스할 수 있으며 외부에서는 액세스할 수 없습니다.
class 학생(객체): def __init__(self, name, Score): self.__name = name self.__score = Score def print_s core(self): print('%s: %s' % (self.__name, self.__score)) |
3. 수정 후 외부 코드에는 변경 사항이 없지만 인스턴스 변수는 더 이상 사용할 수 없습니다. __name 및 인스턴스 변수 .__score:
>>> bart = Student('Bart Simpson', 98) >>> 가장 최근의 마지막 호출 ): 파일 " AttributeError: 'Student' 객체에 '__name' |
... def get_name(self): return self.__name def get_score(self): return self.__score |
... def set_score(self, Score): self.__score = Score |
... def set_score(self, Score): if 0 < ;= 점수 <= 100: el SELF .__ SCORE = Score Else: 값 올리기 오류('나쁜 점수') 7. Python에서 __xxx__와 유사한 변수 이름, 즉 이중 밑줄로 시작하고 이중 밑줄로 끝나는 변수 이름은 특수 변수에 직접 액세스할 수 있으므로 전용 변수가 아니라는 점에 유의해야 합니다. __name__, __score__ 등의 변수 이름은 사용할 수 없습니다. 때로는 _name과 같이 밑줄로 시작하는 인스턴스 변수를 볼 수도 있습니다. 그러나 이러한 인스턴스 변수는 외부에서 액세스할 수 있습니다. 그러나 관례에 따르면 이러한 변수는 "접근할 수 있지만 나를 개인 변수로 취급하고 마음대로 접근하지 마세요." 8. 이중 밑줄로 시작하는 인스턴스 변수가 반드시 외부에서 접근할 수 없는 것은 아닙니다. __name에 직접 액세스할 수 없는 이유는 Python 인터프리터가 외부에서 __name 변수를 _Student__name으로 변경하므로 __name 변수는 여전히 _Student__name을 통해 액세스할 수 있기 때문입니다. 9.3 상속1. 클래스가 다른 클래스의 특수 버전과 유사한 경우 상속을 사용할 수 있습니다. 클래스가 다른 클래스를 상속하면 자동으로 다른 클래스의 모든 속성과 메서드를 가져옵니다. 원래 클래스는 상위 클래스이고 새 클래스는 하위 클래스입니다. 2. 하위 클래스는 상위 클래스의 모든 속성과 메서드를 상속하며, 자체 속성과 메서드를 정의할 수도 있습니다. OOP 프로그래밍에서는 클래스를 정의할 때 기존 클래스에서 상속할 수 있습니다. 새 클래스를 하위 클래스(Subclass)라고 하며 상속된 클래스를 기본 클래스, 상위 클래스 또는 슈퍼 클래스라고 합니다. 수업).
9.3.1 하위 클래스 메서드 __init__()1. 상속을 위해서는 상위 클래스의 모든 속성에 값을 할당해야 합니다. 클래스의 __init__()에는 상위 클래스의 도움이 필요합니다. 2. 그리고 상속 파일에서 상위 클래스는 하위 클래스 앞에 있어야 합니다. 3. 하위 클래스 정의 시 상위 클래스 이름을 괄호 안에 명시해야 합니다. 4.super() 특수 함수는 Python이 상위 클래스와 하위 클래스를 병렬로 연결하는 데 도움이 됩니다. 부모 클래스는 슈퍼 클래스라고도 불리며, 슈퍼의 기원이다. 9.3.2 하위 클래스의 메서드 및 속성 정의클래스가 클래스에서 상속되도록 합니다. 하위 클래스를 상위 클래스와 구별하는 속성 및 메서드를 추가할 수 있습니다. 9.3.3 상위 클래스 재작성상위 클래스에 해당하는 메소드는 하위 클래스의 요구 사항을 충족하지 않는 경우에만 하위 클래스에 새로운 메소드를 추가하여 하위 클래스의 특성을 설명할 수 있습니다. 상위 카테고리 중 최악의 카테고리를 제거하고 최선의 카테고리를 선택하세요. 9.3.4 다형성1. 하위 클래스와 상위 클래스 모두에 동일한 메서드가 있는 경우 하위 클래스가 상위 클래스의 메서드를 재정의한다고 합니다. 코드가 실행될 때 하위 클래스의 메서드는 항상 적용됩니다. . 이런 식으로 상속의 또 다른 이점인 다형성 2을 얻습니다. 따라서 상속 관계에서 인스턴스의 데이터 유형이 하위 클래스인 경우 해당 데이터 유형도 상위 클래스로 간주될 수 있습니다. 그러나 그 반대는 사실이 아닙니다. 3. 다형성의 장점은 Dog, Cat, Tortoise...를 전달해야 할 때 Animal 유형만 수신하면 된다는 것입니다. 왜냐하면 Dog, Cat, Tortoise...는 모두 Animal 유형이기 때문입니다. , 동물의 종류에 따라 조작이 가능합니다. Animal 유형에는 run() 메소드가 있으므로 전달된 모든 유형이 Animal 클래스이거나 하위 클래스인 한 자동으로 실제 유형의 run() 메소드를 호출합니다. 이것이 바로 다형성을 의미합니다. 4. 변수의 경우 동물 유형이라는 것만 알면 됩니다. 해당 하위 유형을 정확히 알 필요는 없으므로 안심하고 run() 메소드를 호출할 수 있습니다. Animal, Dog , Cat 또는 Tortoise 객체의 경우 런타임 시 객체의 정확한 유형에 따라 결정됩니다. 이것이 다형성의 진정한 힘입니다. 호출자는 세부 사항에 관계없이 호출에만 관심을 갖고 새 항목을 추가합니다. Animal의 하위 클래스인 경우 원본 코드 호출 방법에 관계없이 run() 메서드가 올바르게 작성되었는지 확인하세요. 이것은 유명한 "개방 및 폐쇄" 원칙입니다.
9.3.5 __slots__ 사용제한을 달성하기 위해 Python에서는 클래스를 정의할 때 특수 __slots__ 변수를 정의하여 클래스 인스턴스에 추가할 수 있는 속성을 제한할 수 있습니다.
__slots__를 사용할 때 __slots__에 의해 정의된 속성은 현재 클래스 인스턴스에만 영향을 미치고 상속된 하위 클래스에는 영향을 미치지 않습니다. 9.3.6 다중 상속1. 다중 상속을 통해 하위 클래스는 여러 상위 클래스의 모든 기능을 동시에 얻을 수 있습니다. 2. 클래스의 상속 관계를 설계할 때 일반적으로 메인 라인은 단일 소스에서 상속됩니다. 예를 들어 Ostrich는 Bird에서 상속됩니다. 그러나 추가 기능을 "혼합"해야 하는 경우 다중 상속을 통해 이를 달성할 수 있습니다. 예를 들어 Ostrich가 Bird에서 상속하는 것 외에도 Runnable을 상속하도록 할 수 있습니다. 이 디자인은 종종 MixIn이라고 불립니다. MixIn의 목적은 클래스에 여러 함수를 추가하는 것입니다. 이처럼 클래스를 설계할 때 우리는 다단계 복잡한 상속 관계를 설계하는 대신 다중 상속을 통해 여러 MixIn 함수를 결합하는 것을 우선시합니다. 3. 이렇게 하면 복잡하고 거대한 상속 체인이 필요하지 않습니다. 서로 다른 클래스의 기능을 결합하기만 하면 필요한 하위 클래스를 빠르게 구성할 수 있습니다. Python은 다중 상속을 허용하므로 MixIn이 일반적인 디자인입니다. 단일 상속만 허용하는 언어(예: Java)는 MixIn의 디자인을 사용할 수 없습니다. 9.3.7 사용자 정의 클래스1. Python 클래스에는 클래스를 사용자 정의하는 데 도움이 되는 특수 목적 함수가 많이 있습니다. __str____str__() 메소드를 정의하면 보기 좋은 문자열을 반환할 수 있습니다:
class Student(object): def __init__(self, name):
self.a, self .b = 0, 1 # 두 개의 카운터 초기화 a, bdef __iter__(self):
2
위 내용은 Python의 기본 학습 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요! 본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
처음 X 행을 유지하고 테이블 행을 삭제하는 방법
MySQLincident_archive에 수백만 개의 레코드가 있는 큰 테이블이 있습니다. 생성된 열을 기준으로 행을 정렬하고 첫 번째 X 행을 유지하고 나머지는...
에서 2024-04-01 18:32:54
0
1
347
관련 주제
더>
|