2009-04-15 15 views
28

Belirtilen ada sahip bir değişkenin (sınıf üyesi mi yoksa bağımsız) tanımlı olup olmadığını kontrol etmenin bir yolu var mı? Örnek:Bir değişkenin python'da tanımlandığını kontrol etmenin kolay yolu?

if "myVar" in myObject.__dict__ : # not an easy way 
    print myObject.myVar 
else 
    print "not defined" 
+0

üçüncü taraf sınıfı, özel amacım için bir bayrak ayarlamanız gerekir, sınıf karmaşası yapmak istemiyorum __init __() – grigoryvp

+0

Bu gerçekten kafa karıştırıcı. Hangi değişkenlerin kullanıldığını belirlemek için neden çok kod yazılır? Sadece bir örnek oluşturun, print sample .__ dict __. Keys() veya dir (instance) yapın ve tüm özellik isimlerini biliyorsunuz. –

+0

Korkarım da kafam karıştı. Soru, hem sınıf üyeleri hem de bağımsız vars hakkında sorular sormaktadır. Açıkçası, bağımsız, üst düzey vars için __init__ yoktur; 3. parti miasma o kadar zayıf bir şekilde inşa edildi ki, değişkenlerinin çoğunun, çoklu kapsam seviyelerinde, tamamen yok olma riski var mı? –

cevap

27

kompakt yolu:

print myObject.myVar if hasattr(myObject, 'myVar') else 'not defined' 

HTW yoludur olsa daha fazla Pythonic olduğunu.

hasattr() olsa da, x in y.__dict__ farklıdır: y.__dict__ sadece y örneğinin nitelikleridir nesnelerin var ise hasattr(), kalıtsal sınıf __getattr__ dönen dinamik olanlar, hem de dikkate özellikleri alır.

+0

Sanırım sadece hasattr() arıyor. – monkut

+0

Evet, muhtemelen. Ve küresel bir değişkene ne dersiniz? (modül adında değil, sınıf ad alanında değil)? – grigoryvp

+0

@ Cehennem Cehennem: belki (x globals()), ama benim gerçek cevabım, yapılması gereken kodun Pythonic olmayan ve gerçekten değişkeni Yok olarak başlatması gerektiğidir. – Miles

21
try: 
    print myObject.myVar 
except NameError: 
    print "not defined" 
+0

En azından değişkenleri ve çıktıları doğru alın :-) +1 – paxdiablo

+16

Eğer myObject tanımlanmışsa ancak 'myVar' yoksa, bir AttributeError alırsınız. –

9

Paolo haklı, bu gerekli olup olmadığına şeyler yapıyoruz yolu ile bir şey kapalı olabilir. Ama eğer hızlı ve kirli bir şey yapıyorsanız, muhtemelen Idiomatic Python anway'i umursamıyorsanız, bu daha kısa olabilir.

try: x 
except: print "var doesn't exist" 
4

okuyun ve ya hileler python: 'a' halk içinde() ve bir

+0

Boş bir dize veya başka bir falsi değeri ise başarısız olur. –

4

değişken, myvar, tanımlanması durumunda test etmek için: myvar tanımlanırsa

result = dir().count('myvar') 

, sonucudur 1, aksi takdirde 0 olur.

Bu, Python sürüm 3.1.2'de düzgün çalışır.

+0

Neden sadece '' myvar 'dir dir() 'de değil? – rdb

İlgili konular