친절한
1. 클래스 정의
클래스 정의의 구문 형식은 다음과 같습니다.
class ClassName: <statement-1> . . . <statement-N>
클래스도 속성과 메소드로 구성됩니다. 클래스를 정의할 때 클래스의 속성을 설정해야 하는 경우가 있습니다. 따라서 생성자가 필요합니다
클래스 생성자는 다음과 같습니다.
def __init__(self,[...):
클래스가 init() 메서드를 정의하는 경우 클래스의 인스턴스화 작업은 자동으로 init() 메서드를 호출합니다.
그런 다음 생성자가 소멸자와 일치하는 경우 클래스가 생성될 때 생성자를 사용하여 속성을 설정할 수 있으며 클래스가 소멸되면 소멸자가 호출됩니다.
소멸자 구문은 다음과 같습니다.
def __del__(self,[...):
클래스 메소드는 일반 함수와 특별한 차이가 있다는 것을 알게 될 것입니다. 관례상 이름은 self 입니다.
그렇다면 자아는 무엇을 상징하나요?
예제를 보고 이를 통해 답을 찾을 수 있습니다.
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
출력 결과 관찰:
실행 결과에서 self는 클래스의 인스턴스를 나타내고 출력은 현재 개체라는 것이 분명합니다. 주소, self.__class__는 클래스를 가리킵니다.
물론 self는 파이썬 키워드가 아니므로 다른 문자로 바꾸면 정상적으로 실행될 수 있다는 뜻입니다. self를 사용하는 데 익숙할 뿐입니다
2. Python 클래스 정의의 역사적 문제
Python 버전의 반복에는 클래스에 대한 역사적 문제가 있는데, 이것이 바로 새로운 스타일의 클래스 문제입니다. 구체적으로 먼저 다음 코드를 살펴보세요.
#!/usr/bin/env python # -*- coding: UTF-8 -*- # 旧式类 class OldClass: pass # 新式类 class NewClass(object): pass
여기서는 클래스를 정의하는 다양한 방법이 사용되는 것을 볼 수 있습니다. 가장 큰 차이점은 Python2에서는 객체 클래스를 상속한다는 것입니다. 클래스를 정의할 때 가장 좋습니다. 물론 새로운 스타일의 클래스를 정의하는 것은 Python3의 모든 클래스가 새로운 스타일의 클래스이기 때문에 Python3에서는 이 문제가 존재하지 않습니다.
그렇다면 새로운 스타일의 클래스와 이전 스타일의 클래스의 차이점은 무엇인가요?
다음 코드를 실행하세요.
#!/usr/bin/env python # -*- coding: UTF-8 -*- # 旧式类 class OldClass: def __init__(self, account, name): self.account = account; self.name = name; # 新式类 class NewClass(object): def __init__(self, account, name): self.account = account; self.name = name; if __name__ == '__main__': old_class = OldClass(111111, 'OldClass') print(old_class) print(type(old_class)) print(dir(old_class)) print('\n') new_class=NewClass(222222,'NewClass') print(new_class) print(type(new_class)) print(dir(new_class))
출력 결과를 주의 깊게 관찰하고 비교하면 새로운 스타일의 클래스와 문제가 없기 때문에 Python3의 출력 결과가 완전히 동일하다는 점에 유의하세요. Python3의 구식 클래스.