У меня класс Vehicle. Хочу переименовать в Rover. Я знаю, что мы можем создать другую ссылочную переменную, но я больше не хочу, чтобы имя класса было таким же.
Играл с __name__, но безуспешно.
class Vehicle:
pass
st = "Rover"
Vehicle.__name__=st
obj1=Rover()
Ожидал:
Класс Vehicle переименован в Rover без обработки файлов и внутри программы.
Зачем тебе это делать?
Да, определенно, но это похоже на то, что после того, как определенная часть моего кода будет выполнена, если я переименую этот класс и связанные подклассы для использования в каком-то другом файле, я могу сэкономить много работы.
В какой ситуации вы оказались, когда это сэкономило бы работу? Если вы объясните контекст, мы, вероятно, сможем предложить лучший вариант. Это похоже на XY проблема.
То, что вы пытаетесь сделать, очень далеко от передовой практики. Если вы хотите случайно выбрать имя класса, измените свой код.
Назначение класса __name__ абсолютно не приведет к тому, что существующая глобальная переменная Vehicle, которая относится к классу, изменит имя это ...
[docs.python.org/3/tutorial/classes.html]This provides semantic for importing and renaming Я прочитал это, и поэтому я подумал, что переименование может быть выполнено, и не нашел никакой ссылки, которая могла бы помочь мне в этом, поэтому задал этот вопрос при подготовке простого класса транспортного средства с стоимостью, типом, суммой премий и т. д. В качестве атрибутов . Мысль о том, чтобы изменить имя на Rover и использовать атрибуты как есть.
Rex5: Мне кажется, что "Rover" должен быть строкой ценность экземпляра класса Vehicleатрибут: например. vehicle1.model. Люди часто путают эти два ...






В комментариях у вас есть (очень немного искаженная) цитата из https://docs.python.org/3/tutorial/classes.html:
This provides semantic for importing and renaming
Вот настоящая цитата с немного большим контекстом:
As in Smalltalk, classes themselves are objects. This provides semantics for importing and renaming.
Это говорит о том, что у нас может быть библиотека Python с классом в библиотеке:
# lib_k.py
class Klass:
... definitions ...
Затем в каком-нибудь другом модуле Python мы можем написать:
from lib_k import Klass as LibKClass
что в основном полезно, если мы также собираемся сделать:
from lib_l import Klass as LibLClass
а затем напишите такой код:
def f(args):
obj_k = LibKClass(...)
obj_l = LibLClass(...)
Я лично предпочитаю писать:
import lib_k
import lib_l
def f(args):
obj_k = lib_k.Klass(...)
obj_l = lib_l.Klass(...)
но разрешены оба способа, и какой из них использовать - дело вкуса, а не правильности.
import присвоение классу другого локального имени, как это, не изменяет фактический объект класса. то есть print(LibKClass.__name__) -> Klass и print(LibLClass.__name__) -> Klass. Кроме того, имена модулей (и, следовательно, соответствующие им имена файлов) должны быть в нижнем регистре (согласно PEP 8), поэтому я бы посоветовал избегать их использования здесь, в примере кода (потому что это может дать новичкам неправильное представление).
@martineau: хороший момент, я переименую их здесь в lib_k и lib_l. Я подумал упомянуть тот факт, что __name__ остались без изменений, но решил на этом остановиться.
torek: Так лучше ... и не нужно упоминать, что не менял __name__ - я сделал это за вас здесь, в комментариях. ;¬)
Было бы здесь наследование лучше? Изменение основного имени вашего класса приведет к поломке большого количества зависимого кода, не так ли?