【问题标题】:Type() function of pythonpython的type()函数
【发布时间】:2021-09-20 07:06:57
【问题描述】:

下面是我尝试过的代码

 class try1 :
    a = 0

 box = type(try1())
 print(box)

这是输出

<class '__main__.try1'>

现在我稍微修改了代码

class try1:
   a = 0
    
box = type(try1())
print((type(box)))

这是输出

<class 'type'>

现在我知道 type() 函数用于返回给定参数的类类型。谁能帮我理解在已经存储了另一个类的类型(即 try1)的变量(即 box )上应用 type() 函数会给出这个输出吗?

【问题讨论】:

  • 您发布的代码在语法上不正确并产生语法错误。请粘贴您的实际代码。特别注意类名和缩进。
  • 非常感谢...更正完毕
  • 你的缩进仍然是非法的。
  • 另外,考虑给第二个类一个不同的名字(例如,try2)。你会看到,如果没有第一个类,如果单独定义第二个类是不可能的。
  • 第二个代码在不同的python文件中

标签: python-3.x class types python-class


【解决方案1】:

首先,type 不是一个函数,而是一个类。见the docs

也许这段代码让它更清晰一点:

class try1 :
    a = 0


instance = try1()
box = type(instance)
print(box)
print((type(box)))

# the type of the instance object is it's class
assert box is try1
# but classes themselves are objects too
assert isinstance(try1, object)
# and because box is try1
assert type(box) is type(try1)
# to be more specific, the class of a class is type
assert isinstance(try1, type)
assert type(try1) is type
# and therefore
assert repr(type(try1)) == "<class 'type'>"


# we could have created the try1 class by using the type class:
try1 = type('try1', (), {'a': 0})
# and end up with exactly the same thing
assert try1().a == 0
assert repr(type(try1())) == "<class '__main__.try1'>"

# well almost... we just created a new class and rehung the try1 to point to it
# box still points to the old try1
# so they may look the same
assert repr(try1) == repr(box)  # "<class '__main__.try1'>"
# they are different classes
assert not (try1 is box)

Python 中的所有变量都只是指向某物的名称。 class try1: 只是一个语法糖,用于创建一个带有 try1 的 __name__ 的类型,并让我们命名空间中的名称 try1 指向它。

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多