Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python历史和设计:为什么要使用IsubClass()而不是丰富的比较?_Python_Computer Science_Language Design_Language History - Fatal编程技术网

Python历史和设计:为什么要使用IsubClass()而不是丰富的比较?

Python历史和设计:为什么要使用IsubClass()而不是丰富的比较?,python,computer-science,language-design,language-history,Python,Computer Science,Language Design,Language History,在Python中,比较运算符--=--可以实现为表示与实现类相关的任何内容。在Python2中,这是通过重写\uuucmp\uuuu完成的,在Python3中,这是通过重写\uult\uuu和friends完成的。使用issubclass()内置方法而不允许使用bool时,不妨为你所知道的发射核导弹。在您检查a/b的类型之前,请查看类实现和+运算符重载实现(如果有…,如果没有…,请查看父类是否有…,如果没有,请查看父类是否有…)我认为这是一种非功能性优势。唯一的技术区别是,我认为它的优点是无功能

在Python中,比较运算符--
=
--可以实现为表示与实现类相关的任何内容。在Python2中,这是通过重写
\uuucmp\uuuu
完成的,在Python3中,这是通过重写
\uult\uuu
和friends完成的。使用
issubclass()
内置方法而不允许使用
bool
(true)、
int
(true)、
int等表达式的优点是什么

issubclass(class,classinfo)

如果类是classinfo的子类(直接、间接或虚拟),则返回true。类被认为是其自身的一个子类classinfo可能是类对象的元组,在这种情况下,将检查classinfo中的每个条目。在任何其他情况下,都会引发TypeError异常

另一个原因是它是描述性的;并非所有使用Python的人都是数学家。

粗体字的一个优点是:

issubclass(class,classinfo)

如果类是classinfo的子类(直接、间接或虚拟),则返回true。类被认为是其自身的一个子类classinfo可能是类对象的元组,在这种情况下,将检查classinfo中的每个条目。在任何其他情况下,都会引发TypeError异常


另一个原因是它是描述性的;并非所有使用Python的人都是数学家。

因为这会与Python的禅宗格格不入:

显式优于隐式。

如果单独查看以下代码行:

issubclass(a, b)
很明显,
a
b
是包含类的变量,我们正在检查
a
是否是
b
的子类。如果它们碰巧不包含类,您就会知道

但是看看这个

a < b
a
我什么都不会告诉你。在知道我们正在检查
a
中的类是否是
b
的子类之前,您需要检查周围的代码以确定它们包含类。如果说a=5和b=6,它仍然会运行“良好”

但是Python是灵活的,所以如果您真的想要这样做,您可以使用您所展示的行为实现一个基类型


实际上,作为一个例外,例如C++中重载运算符的盛行是语言的一个显著缺陷(至少在我看来),因为当你看到代码> A+B < /代码>时,不妨为你所知道的发射核导弹。在检查a/b的类型之前,请查看类实现和

+
运算符重载实现(如果有…,如果没有…,请查看父类是否有…,如果没有…,请查看父类是否有…)

,因为这将违反Python的Zen:

显式优于隐式。

如果单独查看以下代码行:

issubclass(a, b)
很明显,
a
b
是包含类的变量,我们正在检查
a
是否是
b
的子类。如果它们碰巧不包含类,您就会知道

但是看看这个

a < b
a
我什么都不会告诉你。在知道我们正在检查
a
中的类是否是
b
的子类之前,您需要检查周围的代码以确定它们包含类。如果说a=5和b=6,它仍然会运行“良好”

但是Python是灵活的,所以如果您真的想要这样做,您可以使用您所展示的行为实现一个基类型


实际上,作为一个例外,例如C++中重载运算符的盛行是语言的一个显著缺陷(至少在我看来),因为当你看到代码> A+B < /代码>时,不妨为你所知道的发射核导弹。在您检查a/b的类型之前,请查看类实现和

+
运算符重载实现(如果有…,如果没有…,请查看父类是否有…,如果没有,请查看父类是否有…)

我认为这是一种非功能性优势。唯一的技术区别是,
我认为它的优点是无功能性的。唯一的技术区别是
没有特别的原因。事实并非如此,可能是因为这些类型的比较在很大程度上是不被鼓励的(你应该使用继承和统一接口)。因此,基本上你是在问为什么他们使用描述性名称,而不是以一种大多数人可能不明显的方式重载运算符?(免责声明:我认为排序类型是一件很好的事情,但我还是喜欢Haskell和与类型相关的shenanigan。)你的问题本质上是,“Python的设计人员是否可以对该语言进行不同的设计?”答案是,是的,他们可以。(PS:在Python2.x的较新版本中,富比较运算符也是首选。)@delnan:是的,对不起,我刚刚很快签入了2。7@delnan,谢谢,这就是我想要的答案。没有特别的原因。事实并非如此,可能是因为这些类型的比较在很大程度上是不被鼓励的(你应该使用继承和统一接口)。因此,基本上你是在问为什么他们使用描述性名称,而不是以一种大多数人可能不明显的方式重载运算符?(免责声明:我认为排序类型是一件很好的事情,但我还是喜欢Haskell和与类型相关的shenanigan。)你的问题本质上是,“Python的设计人员是否可以对该语言进行不同的设计?”答案是,是的,他们可以。(PS:在Python2.x的较新版本中,富比较运算符也是首选。)@delnan:是的,对不起,我刚刚很快签入了2。7@delnan,谢谢,这就是我想要的答案。正如您从我上面的实现中所看到的,
\uu lt\uu
方法可以处理一个类型元组。是的,但是您确实得到了