2014-09-15 18 views
8

CPython 3.4'te bazı yerleşik satır içi (sınıf yapıcıları, yöntemler vb.) Için dir() biri varsa, bunların çoğunun çoğu zaman __text_signature__ adlı özel bir özniteliğe sahip olduğunu öğrenir. Bununla birlikte, bununla ilgili belgelerin varlığı yoktur. Ancak, bu belgenin bir kopyası yoktur. Ayrıca, öznitelik adı için googling __signature__ başka bir olası özel özellik olduğunu gösterir, ancak sahip olacak herhangi bir yerleşik işlev bulamadım.Python 3.4 için kullanılan __signature__ ve __text_signature__ nedir?

İşlev argüman imzasıyla ilgili olduklarını biliyorum, ancak bunun ötesindeki hiçbir şey, değerleri ne anlama geliyor ve bunların kullanımı nedir?

cevap

8

Bu özellikler C kodunda tanımlanan Python nesneler için iç gözlem orada etkinleştirmek için vardır. C-API Argument Clinic, Signature objects modelini oluştururken inspect modülüne yardımcı olmak için veri sağlar. C-API fonksiyonlarının gözlemlenmesi daha önce desteklenmedi.

__text_signature__ değerinin nasıl kullanıldığıyla ilgili iç inspect._signature_fromstr() function'a bakın.

Şu anda, __text_signature__ özniteliği C-API'daki nesnelerde ayarlanan iç dokümanın içinden doldurulur; Basit bir metin araması, \n--\n\n Öznitelik Kliniği tarafından oluşturulan belge dizelerinin tipik olduğu objectname(...)\n--\n\n için yapılır. Bazı örnekler bulmak istiyorsanız type object slots'a bir göz atın. Ya da Argüman Kliniğinin imzaları tanımlamak için nasıl kullanıldığını görmek için audioop module source'a bakabilirsiniz; Argument Clinic script, docstrings oluşturmak için (audioop.c.h file ekinde bulunanlar) üzerinde çalışır. Varsa, __signature__ özniteliği inspect.Signature() nesnesi olurdu;

Bir metin sürümü sağlamak yerine, bir C-API bunun yerine tamamen ayrıştırılmış Signature örneğini sağlayabilir.

+0

Cevabınızda ciddi bir hata var, C-API Argüman Kliniği olarak adlandırılıyor, aynı isimle Monty Python taslağının referansı;) –

+0

@Antti: * Size bir kez söyledim *. –

+0

Başlangıcı hala "Attribute Clinic" diyor: D –

İlgili konular