Chciałbym nazwać metodę, aby dać mi dyktować wszystkie "nieprywatne" (używam tu terminu "prywatny" nieco luźniej, ponieważ tak naprawdę nie istnieje w Pythonie) i atrybutów niewbudowanych (np. te, które nie zaczynają się od pojedynczego lub podwójnego podkreślenia) w klasie. Coś jak vars (MyClass), które zwróci tylko "publiczne" atrybuty tej klasy.Czy istnieje metoda Pythona do uzyskiwania dostępu do wszystkich nieprywatnych i niewbudowanych atrybutów klasy?
Jestem świadomy, że
from M import *
nie importuje obiekty, których nazwa zaczyna się od znaku podkreślenia. (http://www.python.org/dev/peps/pep-0008/#id25) Jak importuje to? Poprzez wbudowaną funkcję lub po prostu zaznaczając podkreślenia? Jaki jest pythonic sposób to zrobić?
Przykład:
class MyClass(object):
def __init__(self):
do_stuff()
def _private(self):
print 'private'
def __gets_name_mangled(self:
print 'becomes _MyClass__gets_name_mangled()'
def public(self):
print 'public'
Jeśli robię
vars(MyClass).keys()
uzyskać
['_MyClass__gets_name_mangled', '__module__', '_private', '__doc__', '__dict__', '__weakref__', 'public', '__init__']
Jak mogę uzyskać tylko
['public']
Czy muszę sam sprawdzić podkreślenia? Wydaje się, że byłby to pythonic sposób na zrobienie tego.
Więcej informacji na temat podkreślenia i podwójne podkreślenia, patrz: What is the meaning of a single- and a double-underscore before an object name?
'Vars (myClass) .keys()' 'jest dir (MyClass)' – Elazar
nie wiem jakiejkolwiek funkcji, która to robi. Zawsze jest: '[f for f in dir (MyClass) jeśli nie f.startswith ('_')]' – Blender
@Elazar jeśli moje zrozumienie jest poprawne, dir (MyClass) zwróci atrybuty klas, które są podklasy przez MyClass (jeśli MyClass zdarzyło się podklasy coś) oprócz tych zdefiniowanych w MyClass, podczas gdy vars (MyClass) zwraca tylko te atrybuty zdefiniowane w MyClass. Subtelna różnica. Ale oryginalne pytanie stoi. – andy