Несмотря на то, что было выдвинуто много хороших предложений, самый близкий можно получить к первоначально запрошенному коду, а именно:
class ClassName(object):
def HocusPocus(name):
setattr(ClassName, name, property(fget=..., fset=...))
HocusPocus("blah")
HocusPocus("bleh")
это:
class ClassName(object):
def HocusPocus(name):
return property(fget=..., fset=...)
blah = HocusPocus("blah")
bleh = HocusPocus("bleh")
Я предполагаю, что загадочным ...
отредактированным частям тоже нужен доступ к name
(иначе нет необходимости передавать его в качестве аргумента).
Дело в том, что в теле класса HocusPocus по-прежнему является просто функцией (поскольку объект класса еще не существует до тех пор, пока тело класса не завершит выполнение, тело по существу похоже на тело функции, которое выполняется в своем локальном тексте [без оптимизации пространства имен, обычно выполняемой компилятором Python для локальных объектов реальной функции, но это только упрощает семантику!]) и, в частности, она может вызываться в этом теле, может возвращать значение, которому можно присвоить это значение в локальную переменную тела класса, которая станет атрибутом класса в конце выполнения тела) и т. д.
Если вы не хотите, чтобы ClassName.HocusPocus зависал позже, когда вы закончите выполнять его в теле класса, просто добавьте оператор del
(например, как последний оператор в теле класса):
del HocusPocus