当前位置: 首页 > 面试题库 >

python类名称中的有效字符

姜泳
2023-03-14
问题内容

我正在动态创建python类,我知道并非所有字符在此上下文中都是有效的。

我可以在类库中某处使用某种方法来清理随机文本字符串,以便将其用作类名吗?那个或者允许的字符列表将是一个很好的帮助。

关于与标识符名称冲突的补充:
就像在下面的答案中指出的@Ignacio一样,任何可以有效用作标识符的字符都是类名中的有效字符。您甚至可以毫无保留地将保留字用作类名。但是有一个陷阱。如果您确实使用保留字,则将无法像其他(非动态创建的)类一样使该类可访问(例如,通过执行globals()[my_class.__name__] = my_class)。在这种情况下,保留字始终优先。


问题答案:

Python 3

Python语言参考,第2.3节,“标识符和关键字”

Python中标识符的语法基于Unicode标准附件UAX-31,其详细说明和更改如下所述;有关更多详细信息,另请参阅PEP 3131。

在ASCII范围(U + 0001..U + 007F)中,标识符的有效字符与Python
2.x中的相同:大写字母和小写字母A至Z,下划线_和(除第一个字符外),数字0到9。

Python 3.0引入了ASCII范围之外的其他字符(请参阅PEP
3131)。对于这些字符,分类使用unicodedata模块中包含的Unicode字符数据库的版本。

标识符的长度是无限的。情况很重要。

identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm,

Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue ::=
xid_start ::= html" target="_blank">ion="" whose="" xid_continue*"="">
xid_continue ::=

上面提到的Unicode类别代码代表:

  • Lu-大写字母
  • LL-小写字母
  • LT-标题字母
  • LM-修饰字母
  • 罗-其他字母
  • NL-字母数字
  • Mn-非间距标记
  • 麦克间距组合标记
  • Nd-十进制数
  • PC-连接器标点符号
  • Other_ID_Start-PropList.txt中的显式字符列表,以支持向后兼容
  • Other_ID_Continue-同样

解析时,所有标识符都转换为标准形式NFKC;标识符的比较基于NFKC。

可以在https://www.dcl.hpi.uni-
potsdam.de/home/loewis/table-3131.html上找到列出Unicode 4.1的所有有效标识符字符的非规范HTML文件。

Python 2

Python语言参考,第2.3节,“标识符和关键字”

标识符(也称为 名称 )由以下词汇定义描述:

identifier ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"

标识符的长度是无限的。情况很重要。



 类似资料:
  • 问题内容: ava类名称中哪些字符有效?还有哪些其他规则管理Java类名称(例如,Java类名称不能以数字开头)? 问题答案: 你几乎可以使用任何字符,包括大多数Unicode字符!确切的定义在Java语言规范的3.8:标识符一节中。 一个标识符是无限长序列的Java字母和爪哇位,其中第一个必须是一个爪哇字母。… 字母和数字可能来自整个Unicode字符集,…这允许程序员在使用其母语编写的程序中使

  • 问题内容: CSS 类选择器中允许使用哪些字符/符号? 我知道以下字符 无效 ,但是哪些字符 有效 ? 问题答案: 您可以直接在CSS语法中进行检查。 基本上, 1,名称必须以下划线(),连字符()或字母(– )开头,后跟任意数量的连字符,下划线,字母或数字。有一个陷阱:如果第一个字符是连字符,第二个字符必须2是字母或下划线,并且名称必须至少2个字符长。 简而言之,从W3C规范中提取的先前规则转化

  • 问题内容: 在Java中,我们使用以下程序包以编程方式创建excel文档: 如果尝试设置工作表的名称(不是文件,而是内部Excel工作表),则在以下情况下会出现错误: 名称超过31个字符 名称包含以下任何字符:/ \ *?[] 但是,在创建具有以下工作表名称的文档后: @#$%&()+〜`“’:;,。| 没有错误输出,并且在Java中一切正常。当您在Office 2003中打开excel文件时,它

  • 问题内容: 关键字名称,JavaScript对象或JSON字符串中是否有任何禁止的字符?还是需要转义的字符? 更具体地说,我想在键名中使用“ $”,“-”和空格。 问题答案: 否。任何有效的字符串都是有效的密钥。只要您能逃脱它,它甚至可以拥有: 在将此类值加载到某些语言(尝试将键与对象字段名称关联)时,您可能会遇到困难。我不知道有任何这样的情况。

  • 问题内容: 您可以在PHP名称中为变量,常量,函数,方法,类等使用的有效字符是什么? 手册中提到了一些 正则表达式。此限制何时适用,什么时候不适用 问题答案: 仅当在某些特殊语法元素中直接使用名称时,才使用正则表达式。一些例子: 但是正则表达式 仅 限制名称的这些“直接”使用。通过PHP的各种动态功能,可以使用几乎任意名称。 通常,您 不应假设 PHP中可以包含哪些字符名称。在大多数情况下,它们只

  • 问题内容: 我需要知道在SQL参数名称中使用的有效字符是什么。 给定一个简单的类似,例如,如果X包含连字符,则该语句将失败。参数名称的有效字符是什么? 问题答案: 在您的SQL联机丛书中搜索“标识符”,您应该找到: 常规标识符规则 常规标识符格式的规则取决于数据库兼容性级别。可以使用sp_dbcmptlevel来设置此级别。当兼容性级别为90时,适用以下规则: 第一个字符必须是以下字符之一: Un