객체지향 고급
고급 객체 지향 구문 부분
@staticmethod 데코레이터를 통해 데코레이팅된 메서드를 정적 메서드로 바꿀 수 있습니다. 실제로 일반 메소드는 인스턴스화 직후에 호출할 수 있고, 인스턴스 변수나 클래스 변수는 메소드 내에서 self를 통해 호출할 수 있지만, 정적 메소드는 인스턴스 변수나 클래스 변수에 접근할 수 없고, 접근할 수도 없다는 점을 이해하기 어렵지 않습니다. 변수 및 클래스 변수의 메서드는 실제로 클래스 자체와 관련이 없습니다. 클래스와의 유일한 연결은 클래스 이름을 통해 메서드를 호출해야 한다는 것입니다.
class SchoolMember(object): def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex member_nums = 0def introduce(self): print("My name is %s,and I am %s year old." %(self.name,self.age)) @staticmethod def talk(): print("I like to study python")class Teacher(SchoolMember): def __init__(self,name,age,sex,course,salary): super(Teacher,self).__init__(name,age,sex) self.course = course self.salary = salary def Teaching(self): print("Teacher %s is teaching %s." %(self.name,self.course)) s1 = Teacher("alex",22,"Femal","python",10000) print("before:",s1.member_nums) SchoolMember.member_nums = 12print("before:",s1.member_nums) s1.member_nums = 666 #是在类中重新生成一个变量 print("after:",s1.member_nums) SchoolMember.member_nums = 12print("after:",s1.member_nums)
위 코드에서 member_nums는 클래스 변수입니다. s1.member_nums가 직접 호출되면 클래스의 값이 호출되고, s1.member_nums = 666이면 새 변수를 추가하는 것과 같습니다. 인스턴스입니다. 이때 클래스 값을 수정해도 인스턴스의 변수 값에는 영향을 미치지 않습니다. 위 코드의 출력은 다음과 같습니다.
before: 0
before: 12
after: 666
after: 666
@staticmethon 클래스의 정적 메서드:
SchoolMember(==== % % %= SchoolMember(,,
위에서 코드가 없으면 @staticmethon을 사용하면 코드 실행에 확실히 문제가 없지만 @staticmethod를 사용하면 시스템에서 누락된 매개 변수가 하나 있다는 메시지를 표시합니다. 메소드를 정적 메소드로 바꾸면 이 메소드는 인스턴스와 거의 관련이 없습니다.
class SchoolMember(object): def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex member_nums = 0def introduce(self): print("My name is %s,and I am %s year old." %(self.name,self.age)) @classmethod #类方法,不能访问实例变量 def talk(self): print("%s like to study python" %SchoolMember.member_nums) @staticmethod #让方法在类中剥离,与类没有关系,调用要传递参数 def walk(self): print("%s is walking......" %self) #SchoolMember.talk() #不能调用,类是没有办法访问实例变量,只能访问自己 s1 = SchoolMember("Alex",22,"Female") #实例化 s1.walk("alex")
@staticmethod 정적 메서드는 클래스 내의 메서드를 클래스와 관련이 없도록 만드는 것이며, 호출 시 매개 변수를 전달해야만 호출할 수 있습니다.
클래스 메소드
클래스 메소드는 @classmethod 데코레이터를 통해 구현됩니다. 클래스 메소드와 일반 메소드의 차이점은 클래스 메소드는 인스턴스 변수가 아닌 클래스 변수에만 접근할 수 있다는 점입니다.
class SchoolMember(object): def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex member_nums = 0def introduce(self): print("My name is %s,and I am %s year old." %(self.name,self.age)) #@classmethod #类方法,不能访问实例变量 def talk(self): print("%s like to study python" %self.name) SchoolMember.member_nums #SchoolMember.talk() #不能调用,类是没有办法访问实例变量,只能访问自己 s1 = SchoolMember("Alex",22,"Female") #实例化 s1.talk()
위 코드에서 (1) 클래스는 인스턴스의 속성에 직접 액세스할 수 없습니다 (2) @classmethod의 기능은 프로그램이 SchoolMember와 같은 클래스의 변수에만 액세스할 수 있도록 허용하는 것입니다. 위의 코드 .member_nums는 클래스 메소드입니다. 대화로 액세스할 수 있지만 @classmethod는 클래스 속성에만 액세스할 수 있기 때문에 self.name에는 액세스할 수 없습니다.
class SchoolMember(object): def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex member_nums = 0def introduce(self): print("My name is %s,and I am %s year old." %(self.name,self.age)) @classmethod #类方法,不能访问实例变量 def talk(self): print("%s like to study python" %self.name) SchoolMember.member_nums #SchoolMember.talk() #不能调用,类是没有办法访问实例变量,只能访问自己 s1 = SchoolMember("Alex",22,"Female") #实例化 s1.talk() 运行结果如下: Traceback (most recent call last): File "/home/zhuzhu/day7/staticmethon方法.py", line 18, in <module>s1.talk() File "/home/zhuzhu/day7/staticmethon方法.py", line 13, in talk print("%s like to study python" %self.name) AttributeError: type object 'SchoolMember' has no attribute 'name'
위에서 볼 수 있듯이, 위의 @classmethon 코드는 클래스 내 인스턴스 변수를 금지하고, 클래스 변수만 사용할 수 있습니다. 즉, self.name, self.age, self.sex는 사용할 수 없으며, self.nember_nums, SchoolMember.member_nums 클래스의 변수만 사용할 수 있습니다.
class SchoolMember(object): def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex member_nums = 0def introduce(self): print("My name is %s,and I am %s year old." %(self.name,self.age)) @classmethod #类方法,不能访问实例变量 def talk(self): print("%s like to study python" %SchoolMember.member_nums) SchoolMember.member_nums #SchoolMember.talk() #不能调用,类是没有办法访问实例变量,只能访问自己 s1 = SchoolMember("Alex",22,"Female") #实例化 s1.talk() 运行结果如下:0 like to study python
속성 메서드
속성 메서드의 기능은 @property를 통해 메서드를 정적 속성으로 바꾸는 것입니다.
SchoolMember(==== % % %= SchoolMember(,,
@property를 추가하지 않은 경우 즉, 프로그램은 정상적으로 실행이 되지만, @property를 추가한 후 프로그램 실행 시 오류가 발생하는 이유는 무엇인가요? @property는 클래스 메소드를 클래스 속성으로 바꾸기 때문에 호출 시 다음과 같이 괄호를 추가하지 않고 s1.walk()만 실행하면 됩니다.
SchoolMember(==== % % %= SchoolMember(,,
위 코드에서 @property는 클래스를 회전시킵니다. 메소드를 멤버 속성에 추가하고 s1.walk를 사용하여 직접 호출할 수 있습니다.
클래식 vs 뉴 스타일
class A: #经典类的写法,新式类是A(object)尽量少用经典类,都用新式类现在 def __init__(self,name): self.name = name def f1(self): print("f1,搞基")class B(A): def __init__(self,name): super(B,self).__init__(name) # def f1(self): # print("f1,来呀")class C(A): def __init__(self,name): super(C,self).__init__(name) #def f1(self): #print("f1,一起搞!")class D(B,C): pass d = D("Alex") d.f1()
위 코드에서 클래스 D는 클래스 B와 클래스 C를 상속받습니다. 클래스 D에서 메소드를 실행하면 먼저 클래스 B에서 검색합니다. 이 클래식 클래스와 새 클래스는 No를 검색하면 동일합니다. 클래식 클래스는 클래스 A에서 검색되고, 새 클래스는 클래스 C에서 검색됩니다. 예는 다음과 같습니다. (참고: 차이점은 버전 2.X에서 실행해야 하며, 3.X는 최적화되어 있으며, 클래스 B에서는 못찾으시면 C클래스에서 검색하세요)
다음은 Classic 클래스와 New-style 클래스의 실행 순서입니다.
(new-style 수업) 같은 레벨의 클래스부터 먼저 실행됩니다.
(2) 클래식 클래스 (이전 클래스 먼저 실행)
위 내용은 객체지향 고급의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











JSON(JavaScriptObjectNotation)은 웹 애플리케이션 간의 데이터 교환을 위한 일반적인 형식이 된 경량 데이터 교환 형식입니다. PHP의 json_encode() 함수는 배열이나 객체를 JSON 문자열로 변환할 수 있습니다. 이 기사에서는 구문, 매개변수, 반환 값 및 구체적인 예를 포함하여 PHP의 json_encode() 함수를 사용하는 방법을 소개합니다. 구문 json_encode() 함수의 구문은 다음과 같습니다. st

웨지 우리는 객체가 두 가지 주요 방법으로 생성된다는 것을 알고 있습니다. 하나는 Python/CAPI를 사용하는 것이고, 다른 하나는 유형 객체를 호출하는 것입니다. 내장 유형의 인스턴스 객체의 경우 두 가지 방법이 모두 지원됩니다. 예를 들어 목록은 [] 또는 list()를 통해 생성할 수 있으며 전자는 Python/CAPI이고 후자는 호출 유형 객체입니다. 그러나 사용자 정의 클래스의 인스턴스 객체의 경우 유형 객체를 호출해야만 생성할 수 있습니다. 객체를 호출할 수 있으면 해당 객체는 호출 가능하고, 그렇지 않으면 호출할 수 없습니다. 객체가 호출 가능한지 여부는 해당 유형 객체에 메서드가 정의되어 있는지 여부에 따라 결정됩니다. 좋다

MySQL 쿼리 결과 배열을 객체로 변환하는 방법은 다음과 같습니다. 빈 객체 배열을 만듭니다. 결과 배열을 반복하고 각 행에 대해 새 개체를 만듭니다. foreach 루프를 사용하여 각 행의 키-값 쌍을 새 개체의 해당 속성에 할당합니다. 개체 배열에 새 개체를 추가합니다. 데이터베이스 연결을 닫습니다.

Python의 __contains__() 함수를 사용하여 객체의 포함 작업을 정의합니다. Python은 다양한 유형의 데이터를 처리할 수 있는 많은 강력한 기능을 제공하는 간결하고 강력한 프로그래밍 언어입니다. 그 중 하나는 __contains__() 함수를 정의하여 객체의 포함 작업을 구현하는 것입니다. 이 기사에서는 __contains__() 함수를 사용하여 객체의 포함 작업을 정의하는 방법을 소개하고 몇 가지 샘플 코드를 제공합니다. __contains__() 함수는 Python입니다.

PHP에서 배열은 순서가 지정된 시퀀스이며 요소는 인덱스로 액세스됩니다. 객체는 new 키워드를 통해 생성된 속성과 메서드가 있는 엔터티입니다. 배열 액세스는 인덱스를 통해 이루어지며, 객체 액세스는 속성/메서드를 통해 이루어집니다. 배열 값이 전달되고 객체 참조가 전달됩니다.

제목: Python의 __le__() 함수를 사용하여 두 개체의 작거나 같은 비교 정의 Python에서는 특별한 방법을 사용하여 개체 간의 비교 작업을 정의할 수 있습니다. 그 중 하나는 작거나 같은 비교를 정의하는 데 사용되는 __le__() 함수입니다. __le__() 함수는 Python의 마법 메서드이며 "작거나 같음" 연산을 구현하는 데 사용되는 특수 함수입니다. 작거나 같음 연산자(<=)를 사용하여 두 객체를 비교할 때 Python

PHP의 요청 객체는 클라이언트가 서버로 보낸 HTTP 요청을 처리하는 데 사용되는 객체입니다. Request 객체를 통해 요청 메소드, 요청 헤더 정보, 요청 매개변수 등과 같은 클라이언트의 요청 정보를 얻어 요청을 처리하고 응답할 수 있습니다. PHP에서는 $_REQUEST, $_GET, $_POST 등과 같은 전역 변수를 사용하여 요청된 정보를 얻을 수 있지만 이러한 변수는 객체가 아니라 배열입니다. 요청사항을 보다 유연하고 편리하게 처리하기 위해

Javascript 객체를 반복하는 방법은 무엇입니까? 다음 글에서는 JS 객체 탐색 방법 5가지를 자세히 소개하고, 이 5가지 방법을 간략하게 비교해 보도록 하겠습니다.
