>백엔드 개발 >파이썬 튜토리얼 >파이썬 객체지향

파이썬 객체지향

高洛峰
高洛峰원래의
2016-12-01 13:36:211131검색

클래스의 구성원

1. 필드

1. 정적 필드 클래스 자체를 통해 정적 필드에 액세스하는 것은 클래스 코드가 로드될 때 기다리지 않고 이미 생성되었습니다. new class name()

2. 일반 필드는 객체를 통해 접근합니다

2. 메소드

모든 메소드는 클래스에 속합니다

1. 일반 메소드 먼저 클래스의 객체를 생성한 다음 객체를 통해

을 호출할 수 있습니다. def show(self): self는 호출 메서드

print(self.name)를 자동으로 전달하는 클래스 객체입니다.

2. 정적 메서드 static 메서드 호출은 클래스 이름()을 통해 호출됩니다.

정적 메서드는 Python 함수입니다. 매개변수는 self일 필요는 없습니다.

@staticmethod

def f1():

pass

3. 클래스 메서드 (정적 메소드의 특수한 형식)

@classmethod

def f1(cls): cls는 이 메소드의 클래스 이름을 자동으로 전달하는 것입니다.

pass

3. 속성

클래스에 두 가지 형태의 필드와 메서드가 포함되어 있습니다

@property //속성 선언

def all_page(self): def all_page(self):

100 반환                                  100 반환


@all_page.setter all_page는 데코레이터 @property에 정의된 함수여야 합니다.

def all_page(self ,value):

pass

obj.all_page = 100 //setter 데코레이터 아래의 메서드를 자동으로 호출합니다


@all_page. deleter

def all_page(self):

pass

del obj.all_page //삭제 데코레이터 아래에서 자동으로 메소드 호출


obj.all_page 필드처럼 직접 호출 함수의 반환값 가져오기

obj.all_page() 메소드 호출 객체가 메소드를 호출할 때는 뒤에 ()가 와야 합니다

foo = property(fget=func1,fset =func2,fdel=func3)

foo = property(func1,func2,func3)

func1, func2, fun3은 모두

클래스에 정의된 메소드입니다. 클래스 이름 .foo 프로그램은 func1 메소드를 실행하고 func1

의 반환 값을 얻습니다. 클래스 이름 .foo = "newvalue" func2를 실행합니다. method


멤버 한정자

필드와 메서드 앞에 __을 추가하면 __name 필드가 됩니다. 비공개 멤버

비공개 멤버는 하위 클래스가 아닌 클래스 자체에서만 액세스할 수 있습니다.


특수 멤버 클래스

obj=Foo() Foo 클래스에서 __init__ 내장 메서드를 호출하고 obj 객체를 생성합니다.

obj() Foo()() __call__ 내장 메서드 호출 Foo 클래스에 이 구문은 Python

__str__ 함수에만 존재합니다:

obj = Pager() print(obj) #<__main__.Pager object at 0x00000000006E3B00>

obj = Pager() print(obj.__dict__) #{'name':'333'} 출력 값은 Dict 유형 데이터입니다.

Pager 클래스에 def __str__(self)를 정의합니다. return "{ name:obj.name}"

print(obj) #{name:333} 출력은 다음과 같습니다. 객체의 메모리 주소 대신 객체의 문자열 정보

__dict__ 함수:

(obj는 객체) obj.__dict__ 객체로 캡슐화된 모든 데이터를 dict

(Pager는 클래스) Pager.__dict__ 모든 클래스에 포함된 멤버 정보를 dict

__getitem__(self,item) __setitem(self,key,value) __delitem__(self,key) 함수:

obj = Foo()

obj['aa']         # Foo 클래스에서 __getitem__ 자동 호출

obj['aa']=22                __setitem__

del obj['aa'] # Foo에서 __delitem__

__iter__ 함수 자동 호출 class

객체는 기본적으로 반복될 수 없습니다. 객체가 위치한 클래스가 __iter__ 함수를 정의하면 이 객체는


isinstance ret을 반복할 수 있습니다. =isinstance(obj,Foo) 객체 obj가 Foo 클래스인지 Foo인지 확인합니다. 상위 클래스의 객체

issubclass ret=issubclass(Foo,Bar)


슈퍼와 데코레이터의 기능적 차이(코드 확장용)

1. 데코레이터를 사용하여 원래 다른 사람이 작성한 함수 실행 프로세스에 자신의 코드를 추가할 수 있지만, 소스 코드 파일의

함수에 데코레이터 구문 설탕을 추가해야 합니다. .

2. 슈퍼 및 리플렉션 메커니즘을 사용하면 원본 코드를 전혀 수정하지 않고 다른 사람이 원래 작성한 클래스를 상속하는 하위 클래스를

하위 클래스 사용자 정의 메서드에 추가할 수 있습니다. super(cls).func 기존 코드에 원래 함수를 추가하여 코드 기능 확장을 달성합니다.

model = __import__(Path,fromlist=True) 경로는 읽기 구성 항목 문자열입니다

cls = getattr(model,ClassName) ClassName은 읽기 구성 항목의 문자열입니다.

obj = cls()

obj.f1()                                                    Python 클래스 형식 문자열입니다.

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