Я заменяю статический метод в классе:
class Foo(object):
@staticmethod
def num_examples(subset='train'):
if subset == 'train':
return 6200
elif subset == 'validation':
return 1900
elif subset == 'test':
return 1900
else:
raise ValueError('Invalid data subset "%s"' % subset)
Я хотел бы, чтобы num_examples были в словаре, который вызывается статическим методом с той же сигнатурой, что и текущий метод num_examples, но который можно инициализировать во время выполнения.
Foo.num_examples('bar', 86)
print(Foo.num_examples('bar'))
Я использую Python 3.x.
Это и всегда будет синтаксической ошибкой:
Foo.num_examples('bar') = 86
Вы не можете назначить вызов функции в Python. Вам нужно будет адаптировать код, чтобы использовать dict, как он dict.
Foo.num_examples['bar'] = 86
Вы все равно можете писать устаревшие интерфейсы для части "получения", но часть "настройка" не может быть выполнена, как вы спрашиваете. Для обеспечения устаревшего интерфейса вы можете определить и использовать "вызываемый dict":
import warnings
notset = object()
class MyDict(dict):
def __call__(self, key, val=notset):
if val is notset:
warnings.warn('this syntax is deprecated')
return self[key]
else:
self[key] = val
Создайте dict и поместите его в статический метод, используя global
.
my_dict = {}
class Foo(object):
@staticmethod
def num_examples(subset, value=None):
global my_dict
if value:
my_dict[subset] = value
return None
try:
return my_dict[subset]
except:
print("Not found in my_dict")
Итак, теперь это -
Foo.num_examples('bar', 86)
print(Foo.num_examples('bar'))
Если напечатать 86