7

Python'da str(), int(), float(), vb. Gibi işlevler genellikle tür dönüşümlerini gerçekleştirmek için kullanılır. Bununla birlikte, bunlar, geliştirme süresinde, dönüştürmek istediğiniz türü bilmenizi gerektirir. iki değişken, foo ve bar VerilenPython Yansıma ve Yazım Denetimi

, foo tipini bulmak şu şekildedir: Ben yazmaya çalışıyorum bazı Python koduna subproblem olduğunu. (Bu, genel kod olduğu için geliştirme zamanında bilinmemektedir.) Ardından, 'u foo türüne dönüştürmeye çalışın. Bu yapılamazsa, bir istisna atın.

Örneğin, bu conv'u yapan işlevi çağırdığınızı varsayalım.

result = conv(3.14, "2.718") # result is now 2.718, as a float. 

cevap

11

Kullanım foo.__class__foo tipini almak için: Its imza gibi bir şey aranmak

def conv(foo, bar) : 
    # Do stuff. 

gibi görünecektir. Sonra foo cinsine çubuğu dönüştürmek için diyoruz: Elbette

def conv(foo, bar) : 
    return foo.__class__(bar) 

, foo tipi çubuğunu dönüştürmek bilen bir yapıcı varsa bu sadece çalışır. iyi olurdu

+0

Etkileyici. Bu kadar kolay olabileceğini hiç düşünmezdim. Ayrıca şaşırtıcı (Python’da yeniyim ve metal dilleri daha yakına alıyorum), yerleşiklerle çalışıyor olması. – dsimcha

+0

Kısmen yanlış. foo .__ class__, foo yeni stil nesnesiyse yalnızca foo türüdür. Aksi takdirde, sadece sınıf. –

+0

Sadece yanlış, sınıf daha kesin olduğunda 'tip' dedim. Ama bu dönüşüm için sınıfa ihtiyacı var. Ve Python 3'te, fark zaten gitti. – oefe

16

: Bir tür kontrol etmek istiyorsanız

type(foo)(bar) 
+0

Sadece Python 3.0'da. Python 2.x'te, bu sadece "yeni stil sınıfları" ve yerleşikler için çalışacaktır. – oefe

0
type(foo) 

sonra "tip" en iyi yöntemdir, kesinlikle en iyisi, ben mükemmel python 2.7 - 3.2.2, type() çalışmalarına duyuyorum.

İlgili konular