2009-12-02 12 views
16

Python 3.1'de, builtins modülünde bilmediğim yeni bir yerleşik işlev var:Python'un yerleşik __build_class__ ne yapar?

__build_class__(...) 
    __build_class__(func, name, *bases, metaclass=None, **kwds) -> class 

    Internal helper function used by the class statement. 

Bu işlev ne yapıyor? İçerdeyse neden yerleşimlerde olmalı? Xzx12 işlevinin farkı nedir?

cevap

18

PEP 3115 metaclass

Guido van Rossum said:

Derleme PEP sınıf açıklamada anahtar kelime argümanlar, *args ve **kwds sözdizimi yanı sıra konumsal üsleri kabul ettiğini önermektedir. Bu, derlemek ve yürütmek için biraz dağınık , ancak biz zaten , buna, normal işlevleri çağıran koduna sahibiz.

Bu yüzden __build_class__ adlı yeni (gizli) yerleşik bir işleve yapılan çağrının, içine bu kabul olacağını düşünüyorum. Sonra bu sınıf tanımı şu:

class C(A, B, metaclass=M, other=42, *more_bases, *more_kwds): 
    ... 

bu çevirmek olacaktır: <func> sınıf gövdesi için bir işlev nesnesidir

C = __build_class__(<func>, 'C', A, B, metaclass=M, other=42, 
*more_bases, *more_kwds) 

.

+0

"Sınıf gövdesi için işlev nesnesi" nedir? – DeFazer

+0

Bu bilgiyi Guido van Rossum'daki bağlantılı yazıdaki kod örneğinde bulabilirsiniz. '__build_class__',' locals = {}; fonk (yerli) '. Yani, sınıf X: y = 1 'sınıfı için eşdeğer gövde işlevi' 'şöyle olurdu: 'def func (locals): locals.y = 1' – daluege