python的type()函数

如何解决python的type()函数

下面是我试过的代码

 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() 函数的原因是什么?

解决方法

首先,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: 只是一种语法糖,用于创建一个 __name__ 为 try1 的类型,并让命名空间中的名称 try1 指向它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?