Çağrılan zamanların sayısını koruyan bir işlev oluşturmaya çalışıyorum ve bilgilerin işlevin içinde kalmasını istiyorum. ben şöyle bir sarmalayıcı oluşturma çalıştı:Bir işlevin bir özniteliğini kendi gövdesi içinde değiştirin.
def keep_count(f):
f.count = 0
@functools.wraps(f)
def wrapped_f(*args, **kwargs):
f(*args, **kwargs)
f.count += 1
return wrapped_f
@keep_count
def test_f(*args, **kwargs):
print(args, kwargs)
Ben o iş düşündüm ama 'function' object has no attribute 'count'
diyerek bir AttributeError
aldık.
Zaten sorunu anladım: O dekoratör (keep_count
dekoratör iç tanımlanır) wrapped_f
için eşit benim test_f
setleri çünkü, ben artık test_f
atıfta beri kullanılan orijinal f
sayısını, artan ediyorum yeni işleve.
Bunu çok fazla korsanlık yapmadan yapmanın bir yolu var mı?
Neden bir sınıf kullanmıyorsunuz? Bu, sınıfın ne anlama geldiğidir - –
@AdamSmith işlevlerini çalıştırmak için durumsal bir bağlam oluşturma Python işlevleri nesne olduklarından, durumu da koruyamazlar mı? – wegry
@wegry yapabilirler. İki tahtayı birbirine yapıştırmak için bir çift kerpeten kullanabilirsiniz :) –