在python中创建一个新类型

在python中创建一个新类型,python,python-3.x,types,Python,Python 3.x,Types,在Python3.x中有没有创建新类型的方法?我只能在C++中找到方法。(顺便说一下,我不是指添加/编辑语法) 基本上我想做的是创建一个lexer,在这里我扫描输入,python已经可以做int和string了,但是如果我想要另一个数据类型,比如name,我如何分配它以便我可以做 例如: #这是可以做到的 a=“字符串” 类型(a) > #我该怎么做? b=我的名字 类型(myName) > 您可能想要这样的东西,一个类。在源代码中,您在Python中看到的所有对象类型都是class形式 &

在Python3.x中有没有创建新类型的方法?我只能在C++中找到方法。(顺便说一下,我不是指添加/编辑语法)

基本上我想做的是创建一个lexer,在这里我扫描输入,python已经可以做int和string了,但是如果我想要另一个数据类型,比如name,我如何分配它以便我可以做

例如:

#这是可以做到的
a=“字符串”
类型(a)
> 
#我该怎么做?
b=我的名字
类型(myName)
> 

您可能想要这样的东西,一个
类。在源代码中,您在Python中看到的所有对象类型都是
class
形式

>>> class myName:
...     def __init__(self, name):
...         self.name = name
...     def __str__(self):
...         return self.name
...

>>> b = myName('John')
>>> type(b)
<class '__main__.myName'>
>>> print(b)
John
>>类myName:
...     定义初始化(self,name):
...         self.name=名称
...     定义(自我):
...         返回self.name
...
>>>b=我的名字(“约翰”)
>>>类型(b)
>>>印刷品(b)
约翰

输出与预期略有不同的原因是
类的名称是
myName
,因此
type()
返回的就是这个名称。另外,我们在
名称之前获得了
\uuuu main.
,因为它是当前模块的本地名称。

您可以看看元类:


但是,您到底想实现什么?

简单的回答是,如果不编辑源代码(用C编写),就无法用python创建新类型


然而,在python中创建
类的答案可能更容易,因为编辑源代码可能会造成与包的兼容性问题(可能是这样)。

。或者,您的意思是,您希望能够使用文字值创建名称对象,就像整数使用数字、字符串使用引号、字典使用花括号和冒号一样?我认为您不能修改语言的语法来添加这样的新东西。请参阅PyParsing库。它可能会帮助您进行词法分析和解析。有关类型和类的说明,请参阅。您可能希望使用类而不是实现新类型。如果您希望创建一个没有任何关联方法或属性的唯一类型,可以使用+1的3参数版本,这是显而易见的正确答案。你可以狡辩说它在“语言的设计者想把它称为‘类型’”上失败了,但这与其说是答案,不如说是问题的缺陷。这几乎是完美的!有没有办法将类型改为myName而不是main.myName?还有一种方法可以将字符串转换为这种类型吗?例如,main.myName('Jack')与int('4')类似?不确定它何时是模块的本地名称,但执行
键入(b)。\uuuu name\uuuu
只会自己返回
'myName'
。您当然可以用它进行类型转换,它的工作方式与内置的相同。因此,例如
example='bob';a=myName(示例)
的工作原理就是这样。谢谢!有没有一种方法,当我调用print(b)时,我得到的是John而不是。。。就像print('dsds')和print(5)@user3324343参见编辑一样,这正是特殊的
\uuu str\uu
函数的作用。如果我对你有帮助的话。元类对于这个任务来说开销太大了,这不是真的。可以创建从类型继承的对象。这被称为“元类”。