Подтвердить что ты не робот

Как у вас есть псевдоним класса python, чтобы иметь другое имя без использования наследования?

Если у меня есть класс python, как я могу перечислить это имя класса в другое имя класса и сохранить все его методы, члены класса и члены экземпляра? Возможно ли это без использования наследования?

например. У меня есть класс вроде:

class MyReallyBigClassNameWhichIHateToType:
    def __init__(self):
         <blah>
    [...]

Я создаю сеанс интерактивной консоли, в котором я не хочу, чтобы пальцы моих пользователей падали, когда вы создавали экземпляр класса в интерактивных сеансах, поэтому я хочу, чтобы псевдоним, что действительно длинное имя класса, было чем-то маленьким, как "C", Есть ли простой способ сделать это без наследования?

4b9b3361

Ответ 1

C = MyReallyBigClassNameWhichIHateToType

Ответ 2

Кроме того, если вы импортируете имя из другого модуля...

from modulename import ReallyLongNameWhichIHateToType as FriendlyName

Ответ 3

Вы можете просто сделать:

ShortName = MyReallyBigClassNameWhichIHateToType

Класс в Python - это просто объект, как и любой другой, и может иметь более одного имени.

Ответ 4

Рефакторируйте имя, нет причины, чтобы оно имело длинное имя.

В противном случае whateverName = VeryLongClassName должен выполнить трюк.

Ответ 5

Подход простого присвоения имен работает, но имеет один недостаток, который может быть важен в некоторых случаях: псевдоним будет таким же, как и имя "базового" класса из-за свойства __name__.

class C(object):
    pass

D = C

print(C.__name__)  # 'C'
print(D.__name__)  # 'C' again

Например, если вы создаете пользовательское исключение, а затем другое, которое назначает первое, вы будете получать имя этого "родительского" исключения каждый раз, независимо от того, какое из них вы вызываете, и это, вероятно, должно смутить пользователя:

class CustomBaseException(Exception):

    def __init__(self, operation):
        super(CustomBaseException, self).__init__()
        self.operation = operation

    def __str__(self):
        return f"Invalid operation '{self.operation}'"


OperationException = CustomBaseException

raise OperationException('readd')

выход:

Traceback (most recent call last):
  File "<input>", line 12, in <module>
CustomBaseException: Invalid operation 'readd'

Таким образом, решение было бы на самом деле подкласс класса:

class CustomBaseException(Exception):

    def __init__(self, operation):
        super(CustomBaseException, self).__init__()
        self.operation = operation

    def __str__(self):
        return f"Invalid operation '{self.operation}'"


class OperationException(CustomBaseException):
    pass


raise OperationException('delite')

выход:

Traceback (most recent call last):
  File "<input>", line 14, in <module>
OperationException: Invalid operation 'delite'