影墨·今颜小红书模型生成创意海报文案视觉展示
在 Python ä¸å®�例对象instanceå¹¶ä¸�是类的附å±�产物而是ä¸�类对象并列的一ç‰è¿�行期å®�体。å®�例ä¸�ç±»ä¸€æ ·éƒ½æ˜¯åœ¨ç¨‹åº�执行过程ä¸è¢«åˆ›å»ºçš„对象具备æ˜�确的身份ã€�ç±»å�‹å’Œå€¼å¹¶å®Œå…¨å�—统一的对象模å�‹è§„则约æ�Ÿã€‚ç�†è§£å®�例对象的创建机制ã€�结æ�„å½¢æ€�以å�Šä¸�类对象之间的å��作关系是æ£ç¡®ç�†è§£å±�性访问ã€�方法调用ã€�状æ€�管ç�†å�Šé�¢å�‘对象è¯ä¹‰çš„基础。一ã€�å®�例对象的创建过程在 Python ä¸å®�例并ä¸�æ˜¯ç”±è¯æ³•结æ�„ç›´æ�¥ç”Ÿæˆ�的而是在è¿�行时通过对类对象的调用而产生。当执行如下代ç �æ—¶class Contact: def __init__(self, name, phone): self.name name self.phone phone def display(self): return f{self.name}: {self.phone} c Contact(艾婉婷,
解释器会按顺åº�完æˆ�一组æ˜�确的è¿�行期æ¥éª¤ã€‚1调用类对象触å�‘å®�例创建过程表达å¼�Contact(艾婉婷,
这里的 Contact() å¹¶ä¸�是函数调用而是对类对象å�¯è°ƒç”¨è¡Œä¸ºçš„触å�‘。ä»�对象模å�‹è§’度看该表达å¼�ç‰ä»·äº�进入由 type æ�§åˆ¶çš„å®�例æ�„é€ æµ�程Contact.__call__(...)__call__ 的默认å®�ç�°ç”±å…ƒç±» type æ��供并负责调度 __new__ ä¸� __init__。2调用 __new__æ�„é€ å®�例对象在 type.__call__ 的内部æµ�程ä¸é¦–先会调用类的 __new__ 方法一般ä¸�需用户自定义obj Contact.__new__(Contact)æ¤æ¥éª¤å®Œæˆ�• 分é…�内å˜å¹¶åˆ›å»ºä¸€ä¸ªæ–°çš„å®�例对象• å°†å®�例ä¸�å…¶ç±»å�‹å¯¹è±¡ç±»å»ºç«‹å…³è�”• 为å®�例准备其状æ€�承载结æ�„对äº�未定义 __slots__ 的普通类å®�例的 __dict__ 也在æ¤é˜¶æ®µä¸€å¹¶åˆ›å»ºã€‚æ¤æ—¶å®�例已ç»�在对象模å�‹æ„�义上æˆ�立具备• 独立的身份identity• æ˜�确的类å�‹type但尚未包å�«ä»»ä½•用户定义的状æ€�æ•°æ�®ã€‚3调用 __init__写入å®�例åˆ�始状æ€�在å®�例对象æˆ�功创建å��解释器会自动调用类ä¸å®šä¹‰çš„ __init__ 方法Contact.__init__(obj, 艾婉婷,
这里需è¦�强调的是__init__ å¹¶ä¸�创建å®�例它æ“�作的是一个已ç»�å˜åœ¨çš„å®�例对象def __init__(self, name, phone): self.name name self.phone phoneæ¤æ—¶ä¼ 入的 self 指å�‘刚刚创建的å®�例对象。对 self.nameã€�self.phone 的绑定æ“�作本质上是å�‘å®�例已有的状æ€�容器通常是 __dict__ä¸å†™å…¥æ�¡ç›®ã€‚4å��称绑定建立引用关系当å®�例æ�„é€ ä¸�åˆ�始化完æˆ�å��表达å¼�的求值结æ�œä¼šè¢«ç»‘å®šåˆ°ç›®æ ‡å��称上c Contact(艾婉婷,
这里的 c å�ªæ˜¯å½“å‰�作用域ä¸çš„一个å��称用äº�引用该å®�例对象。å��称绑定å±�äº�作用域ä¸�å��å—è§£æ��机制ä¸�å®�例对象自身的结æ�„和行为相互独立。至æ¤ä¸€ä¸ªå®�例对象ä»�æ�„é€ åˆ°å�¯ç”¨å…¨éƒ¨è¿‡ç¨‹å�‡å�‘生在è¿�行期且æ¯�一æ¥éƒ½é�µå¾ªç»Ÿä¸€çš„对象模å�‹è§„则。二ã€�å®�例对象的本质ä»�对象模å�‹çš„角度看å®�例对象ä¸�å…¶ä»–å¯¹è±¡å¹¶æ— æœ¬è´¨å·®å¼‚å�Œæ ·å…·å¤‡å¯¹è±¡çš„三è¦�ç´ â€¢ 身份identityå®�例在è¿�è¡ŒæœŸé—´çš„å”¯ä¸€æ ‡è¯†â€¢ ç±»å�‹typeå®�例所å±�的类对象• 值valueå®�例当å‰�所承载的状æ€�æ•°æ�®c Contact(艾婉婷,
print(isinstance(c, object)) # Trueprint(type(c)) # class __main__.Contactè¿™æ„�味ç�€å®�例对象• å�¯ä»¥è¢«ç»‘定到å��称• å�¯ä»¥ä½œä¸ºå‡½æ•°çš„å�‚数或返å›�值• å�¯ä»¥åœ¨è¿�行时被检查和修改å®�例并ä¸�是类对象ä¸çš„“内部数æ�®â€�而是独立å˜åœ¨çš„è¿�行期å®�体。三ã€�å®�例å±�性ä¸�å®�例å—å…¸1ã€�å®�例å—典的角色在未引入 __slots__ ç‰çº¦æ�Ÿçš„æƒ…况下大多数å®�例对象都拥有独立的å®�例å—å…¸print(c.__dict__)# {name: 艾婉婷, phone: 13800138001}å®�例å—典用äº�å˜å‚¨â€¢ å®�例特有的状æ€�æ•°æ�®â€¢ è¿�行时动æ€�æ·»åŠ çš„å®�例å±�性c.email testexample.comprint(c.__dict__)# {name: 艾婉婷, phone: 13800138001, email: testexample.com}2ã€�å®�例å±�性的写入è¯ä¹‰å½“执行c.name å¼ ä¸‰Python 的行为是始终å�‘å®�例自身写入å±�性ä¸�会修改类对象ä¸çš„å�Œå��å±�性。å®�例å±�性在è¯ä¹‰ä¸Šå§‹ç»ˆä¼˜å…ˆäº�ç±»å±�性。四ã€�å®�例视角下的å±�性查找机制当通过å®�例访问å±�性或方法时例如c.display()解释器的查找顺åº�为1在å®�例对象的 __dict__ 䏿Ÿ¥æ‰¾2在å®�例所å±�类的 __dict__ 䏿Ÿ¥æ‰¾3沿ç�€ç±»çš„ MRO å�‘上查找父类4è‹¥ä»�未找到抛出 AttributeError这一过程由对象模å�‹çš„å±�性访问入å�£ __getattribute__ 统一驱动而ä¸�是由å®�例或类“å�„自决定â€�。示例class A: x 10 class B(A): pass b B()b.x 20查找顺åº�结æ�œä¸ºâ€¢ b.__dict__[x] → 20• A.x 被é�®è”½ä½†æœªè¢«ä¿®æ”¹äº”ã€�方法访问ä¸�绑定行为在 Python 䏿–¹æ³•methodå¹¶ä¸�是一ç§�独立å˜å‚¨äº�å®�例ä¸çš„对象而是函数对象在特定访问路径下产生的绑定结æ�œã€‚1ã€�方法æ�¥æº�äº�ç±»å±�性类体ä¸é€šè¿‡ def 定义的æˆ�员本质上是函数对象å˜å‚¨äº�类对象的命å��空间ä¸class Contact: ... def display(self): return f{self.name}: {self.phone}æ¤æ—¶display å±�äº� Contact.__dict__而ä¸�å±�äº�任何å®�例的 __dict__。å®�例并ä¸�æŒ�有方法本身。2ã€�å®�例访问触å�‘绑定行为当通过å®�例访问类ä¸å®šä¹‰çš„函数å±�性时c Contact(艾婉婷,
m c.displayå±�性解æ��首先在类对象ä¸å�–得函数对象 display。在å±�性访问返å›�阶段解释器会æ�„é€ ä¸€ä¸ªæ–°çš„ç»‘å®šæ–¹æ³•å¯¹è±¡bound method。该对象å�Œæ—¶æŒ�有• å�Ÿå§‹å‡½æ•°å¯¹è±¡ä½œä¸ºå�¯è°ƒç”¨é€»è¾‘• 当å‰�å®�例对象作为éš�å¼�绑定的第一个å�‚æ•°å› æ¤m å¹¶ä¸�是类ä¸å˜å‚¨çš„å�Ÿå§‹å‡½æ•°è€Œæ˜¯ä¸€ä¸ªä¸´æ—¶ç”Ÿæˆ�çš„ã€�ä¸�å®�例关è�”的方法对象。当调用该方法时m()ç‰ä»·äº�Contact.display(c)需è¦�强调的是• 绑定方法对象是在å±�性访问阶段创建的• 该对象并ä¸�写入å®�例的 __dict__• æ¯�次通过å®�例访问都会生æˆ�新的绑定方法对象3ã€�类访问ä¸�会å�‘生绑定当通过类对象访问方法å±�性时Contact.display得到的是类对象ä¸å˜å‚¨çš„å�Ÿå§‹å‡½æ•°å¯¹è±¡ä¸�会å�‘生任何ä¸�å®�ä¾‹ç›¸å…³çš„ç»‘å®šè¡Œä¸ºã€‚å› æ¤å¦‚æ�œç›´æ�¥è°ƒç”¨Contact.display()将导致错误TypeError: display() missing 1 required positional argument: selfå�Ÿå› 在äº� display 在定义时就约定了第一个å�‚数用äº�æ�¥æ”¶å®�例对象而通过类访问时解释器ä¸�ä¼šä¸»åŠ¨æ›¿ä½ æ��供这个å�‚数。å…ã€�å®�例ä¸�类的å��作关系在 Python 的对象模å�‹ä¸å®�例对象ä¸�类对象通过清晰的è�Œè´£åˆ†å·¥å��作完æˆ�é�¢å�‘对象è¯ä¹‰ã€‚• 类对象æ��供行为定义ä¸�结æ�„规范• å®�例对象承载è¿�行期状æ€�å¹¶å�‚ä¸�行为执行1ã€�行为共享状æ€�独立类ä¸å®šä¹‰çš„æ–¹æ³•ä¸�会被å¤�制到å®�例ä¸ã€‚多个å®�例共享å�Œä¸€ä»½è¡Œä¸ºå®šä¹‰å�„自维护独立状æ€�。例如创建两个å®�例c1 Contact(艾婉婷,
c2 Contact(å¼ ä¸‰,
æ¤æ—¶c
display � c
display å¹¶ä¸�å˜å‚¨åœ¨å�„自的å®�例å—å…¸ä¸display 的函数定义å�ªå˜åœ¨äº� Contact.__dict__ ä¸ã€‚两个å®�例在调用该方法时共享å�Œä¸€ä»½è¡Œä¸ºå®šä¹‰è€Œå®ƒä»¬çš„状æ€�则完全独立print(c
__dict__) # {name: 艾婉婷, phone: 13800138001}print(c
__dict__) # {name: å¼ ä¸‰, phone: 13900000002}这体ç�°äº† Python 对象模å�‹ä¸â€œè¡Œä¸ºå…±äº«ã€�状æ€�分离â€�的基本å�Ÿåˆ™ã€‚2ã€�å®�例作为行为执行的å�‚ä¸�者如å‰�所述c
display()在è¯ä¹‰ä¸Šç‰ä»·äº�Contact.display(c
方法体ä¸å¯¹ self 的访问å®�质上是对当å‰�å®�例状æ€�的访问。3ã€�å®�例的è¿�行期扩展能力å®�例对象本身也是普通对象其结æ�„在è¿�行期并é��ä¸�å�¯å�˜ã€‚在未引入é¢�外约æ�Ÿçš„æƒ…况下å�¯ä»¥åœ¨è¿�行期为å®�例å�•ç‹¬æ·»åŠ å±�性c
email testexample.comprint(c
email) # testexample.com该å±�性仅å˜åœ¨äº� c1 çš„å®�例å—å…¸ä¸print(c
__dict__)# {name: 艾婉婷, phone: 13800138001, email: testexample.com}而å�¦ä¸€ä¸ªå®�例ä¸�å�—å½±å“�print(hasattr(c2, email)) # Falseå�Œæ ·ä¹Ÿå�¯ä»¥ä¸ºå�•个å®�例注入新的å�¯è°ƒç”¨è¡Œä¸ºdef greet(self): return fHello, {self.name} c
greet greet.__get__(c1, Contact)print(c
greet()) # Hello, 艾婉婷æ¤è¡Œä¸ºæ˜¯ä»…å±�äº�该å®�例的行为ä¸�会影å“�类对象å�Šå…¶ä»–å®�例。 å°�结å®�例对象是 Python 对象模å�‹ä¸çš„基本è¿�行期å®�体。å®�例通过类è�·å�–行为定义通过自身结æ�„承载状æ€�æ•°æ�®ã€‚å®�例ä¸�是类的拷è´�也ä¸�是类的附å±�结æ�„而是ä¸�类对象å��作完æˆ�é�¢å�‘对象è¯ä¹‰çš„æ ¸å¿ƒå�‚ä¸�者。ç�†è§£å®�例对象是深入ç�†è§£ Python é�¢å�‘对象机制ã€�动æ€�行为以å�Šå…ƒç¼–程能力的基础å‰�æ��。“点èµ�有ç¾�æ„�èµ�èµ�是鼓励â€�
暗网9/-暗网应用