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.
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? –
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
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