Mam kilka funkcji (poza dowolną klasą), na których ustawiłem atrybuty, takie jak funcname.fields = 'xxx'
. Miałem nadzieję, że mógłbym wówczas dostęp do tych zmiennych od wewnątrz funkcji z self.fields
, ale oczywiście to mówi mi:"Ja" wewnątrz funkcji zwykłej?
Global Name „ja” nie jest zdefiniowane
Więc ... co mogę zrobić? Czy jest jakaś magiczna zmienna, do której mogę uzyskać dostęp? Jak __this__.fields
?
Kilka osób zapytało "dlaczego?". Prawdopodobnie nie zgodzisz się z moim rozumowaniem, ale mam zestaw funkcji, które wszystkie muszą mieć ten sam podpis (przyjąć tylko jeden argument). W większości przypadków ten jeden argument wystarczy, aby wykonać wymagane obliczenia. Jednak w kilku ograniczonych przypadkach potrzebne są dodatkowe informacje. Zamiast zmuszać każdą funkcję do akceptowania długiej listy najczęściej niewykorzystywanych zmiennych, postanowiłem ustawić je tak, aby można je było zignorować.
Chociaż, wydaje mi się, że teraz można użyć **kwargs
jako ostatniego argumentu, jeśli nie dbają o dodatkowe argumenty. No cóż ...
Edytuj: Właściwie niektóre funkcje, których nie napisałem, a raczej nie będą modyfikować, aby zaakceptować dodatkowe argumenty. Poprzez "przekazywanie" dodatkowych argumentów jako atrybutów, mój kod może działać zarówno z moimi niestandardowymi funkcjami, które wykorzystują dodatkowe argumenty, jak iz kodem strony trzeciej, który nie wymaga dodatkowych argumentów.
Dzięki za odpowiedzi :) Speedy
Jak widać, można to zrobić, ale lepszym pytaniem jest * dlaczego ?? * –
@Wayne: Zobacz aktualizację. – mpen
'** kwargs' * prawdopodobnie * prawdopodobnie sprawi, że twoja intencja będzie wyraźniejsza ... i na pewno jest bardziej" pythonic " –