В Python 3.5 как присвоить имя класса переменной класса? Очевидной альтернативой является жесткое кодирование имени класса.Назначить имя класса переменной класса в Python
class Foo(object):
the_module = __name__
also_the_module = __module__
def name_of_module(self):
return __name__
def name_of_class(self):
return __class__.__name__
print("Foo.the_module= ", Foo.the_module)
print("Foo.also_the_module= ", Foo.also_the_module)
print("Foo.__name__= ", Foo.__name__) # what is desired but outside of class def
print("Foo().name_of_module=", Foo().name_of_module())
print("Foo().name_of_class= ", Foo().name_of_class()) # what is desired but inside a method
Я пытался получать класс от первого аргумента @classmethod
.
class Foo(object):
@classmethod
def class_name(cls):
return cls.__name__
# Both of these produce the correct response but neither
# can be used assign to a class variable
print("Foo.class_name()= ", Foo.class_name())
print("Foo().class_name()= ", Foo().class_name())
К сожалению, эту функцию нельзя вызывать при назначении переменной класса. class = class_name
NameError: name 'class_name' is not defined
. my_class = Foo.class_name()
производит NameError: name 'Foo' is not defined
.
Примечание: Обновленный вопрос, чтобы использовать правильный Python термин "класс переменной", а не статическая переменная (что отражает мой C++ фон)
Я попробовал последний фрагмент кода (заканчивается 'print (" Foo(). Class_name() = ", Foo(). Class_name())'), и он работает. Не могли бы вы добавить код, который не работает, а также указать желаемые результаты? – imposeren
Можете ли вы перефразировать свой вопрос, не используя слова «статическая переменная»? Эта концепция не имеет смысла в мире питонов. Что именно вы хотите достичь? Вы хотите установить переменную класса? Вы хотите установить его так, чтобы экземпляры имели к нему доступ? – Oin
Обновленный вопрос для использования «переменной класса» –