이번에는 Python의 메타클래스 사용법과 Python 메타클래스 사용 시 주의사항에 대해 알려드리겠습니다. 실제 사례를 살펴보겠습니다.
오늘 내 임무는 메타클래스가 무엇인지 철저히 이해하는 것입니다. 살펴보겠습니다.
메타클래스를 이해하려면 객체부터 시작해 보겠습니다.
Object (Object)
Python 모든 것이 객체입니다. 이 문장을 들어보셨을 것입니다(지금 들어보셨을 것입니다). 숫자는 객체, string은 객체, 목록 는 객체이고 사전은 객체입니다. 예:
>>> i = 10 >>> s = "abc" >>> nums = [1,2,3] >>> dicts = {"name":"zhang"}
등호의 오른쪽은 객체이고 왼쪽은 이러한 객체에 지정된 이름입니다. 모든 객체에는 ID, 값이라는 세 가지 주요 속성이 있습니다. , 입력합니다.
식별
식별은 개인의 신분증 ID와 동일합니다. 각 개체에는 고유한 ID 식별이 있으며 이는 라이프 사이클 동안 변경되지 않습니다. 컴퓨터 메모리 주소. 객체의 ID는 id() 함수를 통해 확인할 수 있습니다.
>>> id(i) 40592592 >>> id(s) 44980584
객체 값
객체의 두 번째 속성은 값입니다. 예를 들어 i 값은 10, s 값은 abc, nums 값입니다. 1,2,3입니다.
Type
객체의 또 다른 중요한 속성은 유형입니다. 모든 객체는 해당 유형으로 구성됩니다. 예를 들어 위의 i 유형은 int 유형으로 구성됩니다. 정수. s 유형은 문자열 유형, nums 유형은 목록 유형, dicts 유형은 모두 해당 유형으로 구성됩니다.
type()을 통해 객체의 유형을 확인할 수 있습니다.
>>> type(i) <class> >>> type(s) <class> >>> type(nums) <class> >>> type(dicts) <class></class></class></class></class>
객체의 유형도 ID 식별자와 동일합니다. 일단 결정되면 변경되지 않습니다.
클래스 및 (인스턴스) 객체
정수 유형, 문자열 유형, 목록 및 시스템에서 정의한 기타 유형 외에도 키워드로 정의된 자체 유형을 만들 수도 있습니다. 수업 . 예:
>>> class Person: # 这里的 self 指某个实例对象自己 ... def init(self, name): # name 是实例的属性 ... self.name = name # live 是类的属性 live = True
여기의 Person 클래스는 추상 템플릿입니다. 이제 이 클래스를 호출하여 특정 실제 인물을 구성(인스턴스화)할 수 있습니다. 명명된 개체가 나오는데, 이 개체를 인스턴스 개체라고 합니다.
>>> p1 = Person("zhangsan") >>> p1.name 'zhangsan' >>> >>> p2 = Person("lisi") >>> p2.name 'lisi'
여기서 p1과 p2는 인스턴스화 후의 (인스턴스) 객체입니다. 이 두 객체의 유형은 Person 클래스입니다. 클래스와 (인스턴스) 객체 간의 관계는 차량 금형과 같습니다. 자동차도 마찬가지다.
>>> p1 <main.person> >>> type(p1) <class> # 这里的main是模块名称</class></main.person>
클래스도 객체입니다(클래스 객체라고도 함)
지금 우리는 모든 것이 객체이고, 인스턴스(실제 자동차)도 객체이고, 클래스(몰드)도 물론 객체라고 말했습니다.
Python 인터프리터가 키워드 클래스 명령을 실행하면 내부적으로 "Person"이라는 클래스가 생성됩니다. 이 클래스도 클래스 객체라고 합니다(인스턴스 간의 차이점에 유의하세요. ). 객체)에는 ID, 유형 및 값도 있습니다. 예를 들면 다음과 같습니다.
>>> id(Person) 26564024 >>> type(Person) <class> >>> Person <class></class></class>
우리는 이 Person 클래스 객체의 유형이 "type"이라고 불리는 것을 확인했습니다. 이는 Person 클래스가 유형별로 생성된다는 것을 의미합니다. 이제 p1과 p2는 인스턴스 객체이고 Person은 인스턴스 객체라는 것을 기억해야 합니다. 클래스 객체. 게다가 이 유형은 대체 무엇일까요?
복습하자면, 인스턴스 객체 p1의 유형은 클래스 객체 Person이고, Person의 유형은 유형
>>> nums = [1,2,3] >>> type(nums) <class> >>> type(list) <class></class></class>
nums는 목록이고, 목록의 유형도 유형이고, 사전 클래스(dict)의 유형도 유형입니다. 모든 클래스의 유형은 모두 유형이므로 모든 클래스가 유형별로 생성된다는 의미입니다. 이 유형이 메타 클래스입니다. Tao는 하나를 낳고, 하나는 두 개를 낳고, 세 개는 모든 것을 생성합니다. (메타클래스 자체도 객체입니다)
现在我们都知道类(对象)可以使用 class 关键字创建,我们还知道类(对象)的类型是 type,既然知道了它的类型是 type,那么肯定可以通过 type(元类)来创建。
用元类创建类
前面讲到过,type 有一个作用是用于检查对象的类型,其实它还有另外一个作用就是作为元类动态地创建类(对象)。
>>> Person = type("Person", (), {"live":True}) >>> Person <class></class>
Person 就是一个类,它等价于:
>>> class Person: ... live = True ... >>> Person <class></class>
用元类 type 创建类的语法是:
type(类名,基类元组(可以为空), 属性字典)
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 Python 메타클래스를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Arraysinpython, 특히 비밀 복구를위한 ArecrucialInscientificcomputing.1) theaRearedFornumericalOperations, DataAnalysis 및 MachinELearning.2) Numpy'SimplementationIncensuressuressurations thanpythonlists.3) arraysenablequick

Pyenv, Venv 및 Anaconda를 사용하여 다양한 Python 버전을 관리 할 수 있습니다. 1) PYENV를 사용하여 여러 Python 버전을 관리합니다. Pyenv를 설치하고 글로벌 및 로컬 버전을 설정하십시오. 2) VENV를 사용하여 프로젝트 종속성을 분리하기 위해 가상 환경을 만듭니다. 3) Anaconda를 사용하여 데이터 과학 프로젝트에서 Python 버전을 관리하십시오. 4) 시스템 수준의 작업을 위해 시스템 파이썬을 유지하십시오. 이러한 도구와 전략을 통해 다양한 버전의 Python을 효과적으로 관리하여 프로젝트의 원활한 실행을 보장 할 수 있습니다.

Numpyarrayshaveseveraladvantagesstandardpythonarrays : 1) thearemuchfasterduetoc 기반 간증, 2) thearemorememory-refficient, 특히 withlargedatasets 및 3) wepferoptizedformationsformationstaticaloperations, 만들기, 만들기

어레이의 균질성이 성능에 미치는 영향은 이중입니다. 1) 균질성은 컴파일러가 메모리 액세스를 최적화하고 성능을 향상시킬 수 있습니다. 2) 그러나 유형 다양성을 제한하여 비 효율성으로 이어질 수 있습니다. 요컨대, 올바른 데이터 구조를 선택하는 것이 중요합니다.

tocraftexecutablepythonscripts, 다음과 같은 비스트 프랙티스를 따르십시오 : 1) 1) addashebangline (#!/usr/bin/envpython3) tomakethescriptexecutable.2) setpermissionswithchmod xyour_script.py.3) organtionewithlarstringanduseifname == "__"

numpyarraysarebetterfornumericaloperations 및 multi-dimensionaldata, mumemer-efficientArrays

numpyarraysarebetterforheavynumericalcomputing, whilearraymoduleisiMoresuily-sportainedprojectswithsimpledatatypes.1) numpyarraysofferversatively 및 formanceforgedatasets 및 complexoperations.2) Thearraymoduleisweighit 및 ep

ctypesallowscreatingandmanipulatingC-stylearraysinPython.1)UsectypestointerfacewithClibrariesforperformance.2)CreateC-stylearraysfornumericalcomputations.3)PassarraystoCfunctionsforefficientoperations.However,becautiousofmemorymanagement,performanceo


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

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

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

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구
