찾다
백엔드 개발파이썬 튜토리얼Python 메타클래스 인스턴스 분석_python

이 글에서는 주로 Python 메타클래스 인스턴스 분석을 소개합니다. 이 글의 주요 임무는 메타클래스가 무엇인지 모든 사람에게 철저하게 설명하는 것입니다. 도움이 필요한 친구들이 이를 참조할 수 있습니다.

Gui 삼촌이 Python을 발명하고 여기에 여러 가지 개념을 통합했습니다. . 이 언어에서는 반복자, 데코레이터, 함수, 생성기, 클래스, 객체, 코루틴 등이 있습니다.

이런 개념 중 어느 것도 초보자가 이해하기 쉽지 않을 것 같지만, 이보다 더 어려운 개념이 있습니다. 우리가 직접적으로 사용하는 경우는 거의 없지만 매일 사용하고 있는 Python 세계의 창시자입니다. 오늘의 주인공 ------ 메타클래스.

오늘 내 임무는 메타클래스가 무엇인지 철저히 이해하는 것입니다. 살펴보겠습니다.

메타클래스를 이해하려면 객체부터 시작해 보겠습니다.

Object(객체)

Python 모든 것이 객체입니다. 이 문장을 들어보셨을 것입니다(지금 들어보셨을 것입니다). 숫자는 객체, 문자열은 객체, 목록은 객체입니다. , 사전은 객체입니다. 예:


>>> i = 10
>>> s = "abc"
>>> nums = [1,2,3]
>>> dicts = {"name":"zhang"}


등호의 오른쪽은 객체이고 왼쪽은 이러한 객체에 지정된 이름입니다. 모든 객체에는 ID라는 세 가지 주요 속성이 있습니다. , 값 및 유형입니다.

식별

식별은 사람의 신분증 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 &#39;int&#39;>
>>> type(s)
<class &#39;str&#39;>
>>> type(nums)
<class &#39;list&#39;>
>>> type(dicts)
<class &#39;dict&#39;>


객체의 유형도 ID 식별자와 동일하며 결정된 후에는 변경되지 않습니다.


클래스 및 (인스턴스) 객체

시스템에서 이미 정의한 정수 유형, 문자열 유형, 목록 및 기타 유형 외에도 자체 유형을 생성하고 키워드 class를 사용하여 정의할 수도 있습니다. 예:

>>> class Person:
  # 这里的 self 指某个实例对象自己
...  def __init__(self, name):
   # name 是实例的属性
...   self.name = name
  # live 是类的属性
  live = True


여기의 Person 클래스는 Zhang San 또는 Li Si를 참조하지 않는 추상 템플릿입니다. 이제 이 클래스를 호출하여 구성(인스턴스화)할 수 있습니다. 구체적이고 실제 이름이 붙은 개체가 나오는데, 이 개체를 인스턴스 개체라고 합니다.


>>> p1 = Person("zhangsan")
>>> p1.name
&#39;zhangsan&#39;
>>>
>>> p2 = Person("lisi")
>>> p2.name
&#39;lisi&#39;


여기서 p1과 p2는 인스턴스화 후의 (인스턴스) 객체입니다. 이 두 객체의 유형은 Person 클래스입니다. 그 관계는 실제 자동차가 만들어지는 것과 같습니다.


>>> p1
<__main__.Person object at 0x0195AA30>
>>> type(p1)
<class &#39;__main__.Person&#39;> # 这里的__main__是模块名称



클래스도 객체입니다(클래스 객체라고도 함)

지금 우리는 모든 것이 객체이고, 인스턴스(실제 자동차)는 객체이고, 클래스(몰드)는 객체라고 말했습니다. Python 인터프리터가 키워드 클래스 명령어를 실행하면 내부적으로 "Person"이라는 클래스가 생성됩니다. 우리는 이를 클래스 객체라고 부릅니다. 인스턴스 객체의 차이점) ID 식별, 유형 및 값도 있습니다. 예:

>>> id(Person)
26564024
>>> type(Person)
<class &#39;type&#39;>
>>> Person
<class &#39;__main__.Person&#39;>


우리는 이 Person 클래스 객체의 유형이 "type"이라는 것을 알았습니다. 이는 Person 클래스가 유형별로 생성된다는 것을 의미합니다. 이제 p1과 p2가 인스턴스라는 것을 기억해야 합니다. , Person은 클래스 객체입니다. 게다가 이 유형은 대체 무엇일까요?


검토해 보겠습니다. 인스턴스 객체 p1의 유형은 클래스 객체 Person이고, Person의 유형은 type

>>> nums = [1,2,3]
>>> type(nums)
<class &#39;list&#39;>
>>> type(list)
<class &#39;type&#39;>


nums는 목록이고, 목록의 유형도 유형이며, 사전 클래스의 유형입니다. (dict)도 유형이며, 모든 클래스의 유형은 유형입니다. 즉, 모든 클래스가 유형별로 생성된다는 의미입니다. 이 유형이 메타 클래스입니다. Tao는 하나를 낳고, 하나는 두 개를 낳고, 세 개는 모든 것을 생성합니다. (메타클래스 자체도 객체입니다)


이제 우리는 클래스(객체)가 클래스 키워드를 사용하여 생성될 수 있다는 것을 모두 알고 있습니다. 유형이 유형이면 유형(메타클래스)을 통해 생성될 수 있어야 합니다.

메타클래스를 사용하여 클래스 만들기

前面讲到过,type 有一个作用是用于检查对象的类型,其实它还有另外一个作用就是作为元类动态地创建类(对象)。


>>> Person = type("Person", (), {"live":True})
>>> Person
<class &#39;__main__.Person&#39;>


Person 就是一个类,它等价于:


>>> class Person:
...  live = True
...
>>> Person
<class &#39;__main__.Person&#39;>


用元类 type 创建类的语法是:

type(类名,基类元组(可以为空), 属性字典)

总结

以上所述是小编给大家介绍的 Python 元类实例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


相关推荐:

Python解析JSON的实例分享

分析Python解析XML的几种方式


위 내용은 Python 메타클래스 인스턴스 분석_python의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
2 시간의 파이썬 계획 : 현실적인 접근2 시간의 파이썬 계획 : 현실적인 접근Apr 11, 2025 am 12:04 AM

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

파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

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

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

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

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

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

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

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

Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Apr 02, 2025 am 07:12 AM

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

경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?Apr 02, 2025 am 07:09 AM

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

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까?정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까?Apr 02, 2025 am 07:06 AM

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

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

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

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경