고급 객체 지향 구문 부분
@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'</module>
위에서 볼 수 있듯이, 위의 @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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까? HTML 또는 기타 마크 업 언어를 다룰 때는 정규 표현식이 종종 필요합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

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

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

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

뜨거운 주제



