给班上
from __future__ import annotations
from typing import ClassVar,Dict,Final
import abc
class Cipher(abc.ABC):
@abc.abstractmethod
def encrypt(self,plaintext: str) -> str:
pass
@abc.abstractmethod
def decrypt(self,ciphertext: str) -> str:
pass
class VigenereCipher(Cipher):
@staticmethod
def rotate(n: int) -> str:
return string.ascii_uppercase[n:] + string.ascii_uppercase[:n]
_TABLE: Final[ClassVar[Dict[str,str]]] = dict({(chr(i + ord("A")),rotate(i)) for i in range(26)})
编译失败(使用3.8.0 )
../cipher.py:19: in <module>
class VigenereCipher(Cipher):
../cipher.py:24: in VigenereCipher
_TABLE: Final[ClassVar[Dict[str,rotate(i)) for i in range(26)})
../cipher.py:24: in <setcomp>
_TABLE: Final[ClassVar[Dict[str,rotate(i)) for i in range(26)})
E NameError: name 'rotate' is not defined
但是,根据this帖子,rotate
应该可以解决。请注意,使用类名VigenereCipher
进行限定也不起作用,因为它找不到VigenereCipher
(这很有意义,因为我们正在定义它)。
我可以将rotate
设为模块级别的方法,并且可以使用,但是我真的不想这么做,因为它仅在VigenereCipher
中需要。
也尝试了this的回答,但没有成功。