gpt4 book ai didi

python - 实例化一个类——带括号和不带括号的区别

转载 作者:太空狗 更新时间:2023-10-29 22:05:37 25 4
gpt4 key购买 nike

假设我有一个非常简单的类,如下所示:

class myClass:
def __init__(self):
self.myProp = 2

如果我使用方括号实例化,一切都会如我所料:

>>> a = myClass()
>>> a.myProp
2

但是,如果我不在上面的两行中使用括号,即:

>>> a = myClass

我收到以下错误:

>>> a.myProp
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
a.myProp
AttributeError: class myClass has no attribute 'myProp'

如果我打印对象,

>>> a = myClass
>>> a

我明白了

<class __main__.myClass at 0x0275C538>

a 似乎是该类的一个实例,但不知为何没有被初始化。在其他语言中,如果尝试将类实例转换为对象而不对其进行初始化,我预计会出现编译错误(例如,在 C# 中,myClass a = new myClass(); 可以正常工作,但 myClass a = new myClass; 会返回一个编译错误。

所以我的问题是:从技术上讲,没有括号的对象 a = myClass 是什么?

最佳答案

a 是类本身——在 python 中,类是第一类对象1。您可以将它们作为参数传递,将它们别名为不同的名称(正如您在示例中所做的那样),然后您可以从当前命名空间中的任何引用中获取实例。

a = myClass  # a and myClass identical at this point.  The interpretter won't care which you use.
a_instance = a() # instance of myClass

def make_instance(cls):
return cls()

another_instance = make_instance(a)
yet_another_instance = make_instance(myClass)

你看,python 没有任何“编译时检查”,因为实际上没有编译时。 Python 代码在运行时 得到解释。的确,您可以在导入 某些内容时弹出SyntaxError,但这仍然是在运行时。

1无双关语

关于python - 实例化一个类——带括号和不带括号的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28309757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com