2016-03-20 29 views
1

Bir kurucu ile bir sınıf tanımladığımı varsayalım.Python - oluşturucu bağımsız değişkenleri adlarını sıfırlamadan döndürme

class Person: 

    def __init__(self, name="", age=0): 
     self.__name = name 
     self.__age = age 

Şimdi Person bir örneğini yapmak ister, ama ben yapıcı geçmesi gerektiğini unuttum olarak varsayılabilir. varsayılan argümanlar tanımladıktan beri Yapabileceğim Yeni Person, bu kez uygun bir ad ve yaşı geçen yapabilir, böylece ben, argümanlar ne görelim

dummy_person = Person() 
print dummy_person.__init__.__code__.co_varnames 

.

Soru: İlk olarak bir dummy_person örneğini oluşturmak zorunda kalmadan nasıl benzer bir sonuca ulaşabilirim? Diğer bir deyişle: sadece sınıf adını bilerek yapıcı argüman listesine girebilir miyim?

Edit: İşte bu özelliği kullanmayı planlıyorum. Bu işlemin gerçekleşmesi için

args_names = CircleTrajectory.__init__.__code__.co_varnames[1:] 
args = {} 
for arg_name in args_names: 
    args.append(float(input("Insert " + arg_name + ": "))) 

my_circle = CircleTrajectory(*args) 

, bir CircleTrajectory sınıf tanımlanmış olması gerekir ve biz onun kurucu tüm parametreler yüzer olduğunu varsaymak gerekir. Son varsayım bana tam olarak pek cazip gelmiyor, ama sanırım bu güvenlidir, çünkü tüm bu nesnelerin son kullanıcı tarafından bir GUI'ye yazılarak oluşturulması gerekir.

+1

Bunu gibi burada bir yanlış soruyu soruyorsun gibi görünüyor, bunu yapabilir Whle berbat bir çözüm gibi görünüyor. Bu durumu etkileyen tüm kullanım durumunu paylaşabilir misiniz? –

+0

Kullanıcı girdisinden bir örnek oluşturmak istiyorsanız, bu mantık sınıfın bir parçası olmamalıdır (bu retorik bir soru; cevabı evet mi)? Özellikle dışardan ne tür bir giriş gerektiğini anlayamayacağınız göz önüne alındığında, bunu iç gözlemiyle ('my_circle = CircleTrajectory.from_input() ') tersine çevirmekten ziyade bir sınıf yöntemi yapmayı düşünün. – jonrsharpe

+0

Eh, şimdi bahsetmişsin, elbette! Bu aslında tamamen yeni bir olasılıklar dünyasını açar. Hala küçük bir şüphe var: 'from_input' yöntemi bir 'classmethod ', ve içinde bir yapıcıyı çağırıyor mu? – Antonio

cevap

0

Sadece gerçek sınıf Person aynı özelliklere erişmek:

>>> Person.__init__.__code__.co_varnames 
('self', 'name', 'age') 
+0

Harika, benim için çalışıyor! Ama aslında çalıştığına şaşırdım. Sonuçta, '__init__' bir' staticmethod' veya '@ classmethod' değil; aksine, belirli bir örneğe bağlıdır. Sanırım burada bir işlev çağrısı yerine bir kod parçası olarak __init__ ile uğraşıyoruz. Başka herhangi bir içgörü değersiz olurdu. – Antonio

+1

@Antonio örnek yöntemleri, örnekleme öncesinde sınıfta hala var. – jonrsharpe

+0

@ jonrsharpe haklı; Sonuçta, '__init__' var olmak zorundadır, böylece ilk kez başlattığınızda çağrılabilir. –

0

kullanabilirsiniz help(Person) veya help(Person.__init__)

İlgili konular