如果我有一个python类,我怎么能将该class-name别名为另一个类名并保留它的所有方法,类成员和实例成员?这可能不使用继承吗?
例如我有一个类:
class MyReallyBigClassNameWhichIHateToType:
def __init__(self):
<blah>
[...]
Run Code Online (Sandbox Code Playgroud)
我正在创建一个交互式控制台会话,在交互式会话中实例化类时,我不希望用户的手指脱落,所以我想将真正长的类名称别名为'C'.没有继承,有没有一种简单的方法可以做到这一点?
Sil*_*ost 78
C = MyReallyBigClassNameWhichIHateToType
Run Code Online (Sandbox Code Playgroud)
Jam*_*ton 39
此外,如果您从其他模块导入名称...
from modulename import ReallyLongNameWhichIHateToType as FriendlyName
Run Code Online (Sandbox Code Playgroud)
dF.*_*dF. 13
你可以简单地做:
ShortName = MyReallyBigClassNameWhichIHateToType
Run Code Online (Sandbox Code Playgroud)
Python中的类只是一个与其他类似的对象,并且可以有多个名称.
Yuv*_*dam 10
重构名称,没有理由它应该有一个很长的名称.
否则whateverName = VeryLongClassName应该做的伎俩.
简单的名称分配方法可行,但有一个缺点,在某些情况下可能很重要:由于属性的原因,别名将与“基”类的名称相同__name__。
class C(object):
pass
D = C
print(C.__name__) # 'C'
print(D.__name__) # 'C' again
Run Code Online (Sandbox Code Playgroud)
例如,如果您创建自定义异常,然后创建另一个分配第一个异常的异常,则无论您引发其中的哪一个,您每次都会获得此“父”异常的名称,这可能会让用户感到困惑:
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')
Run Code Online (Sandbox Code Playgroud)
输出:
Traceback (most recent call last):
File "<input>", line 12, in <module>
CustomBaseException: Invalid operation 'readd'
Run Code Online (Sandbox Code Playgroud)
因此,解决方案是实际子类化该类:
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')
Run Code Online (Sandbox Code Playgroud)
输出:
Traceback (most recent call last):
File "<input>", line 14, in <module>
OperationException: Invalid operation 'delite'
Run Code Online (Sandbox Code Playgroud)