- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到过类似的问题,但是他们没有回答为什么python __lt__
的优先级比__gt__
高?
快速示例,让我给出一个父类(super class)和一个子类:
class Person(object):
id = 0
def __init__(self, name):
self.name = name
self.id = Person.id
Person.id += 1
def __str__(self):
return self.name
def __lt__(self, other):
return self.id < other.id
class SubPerson(Person):
def __gt__(self, other):
return self.name > other.name
在父类(super class) Person
中,我创建了一个 __lt__
方法,用于根据 Person 的 self.id
进行比较。在子类 SubPerson
中,我创建了一个 __gt__
方法来根据 self.name
进行比较。
我发现,如果我在列表中创建了多个 SubPerson
实例:
s1 = SubPerson('WWW'); s1.id = 14
s2 = SubPerson('XXX'); s2.id = 12
s3 = SubPerson('YYY'); s3.id = 11
s4 = SubPerson('ZZZ'); s4.id = 13
lst2 = [s2, s1, s4, s3]
lst2.sort()
print([i.__str__() for i in lst2]) # >>> ['YYY', 'XXX', 'ZZZ', 'WWW']
我发现的是:如果__lt__
定义在父类(super class)中,那么即使你在子类中定义了__gt__
,它仍然会按照父类(super class)中的__lt__
方法排序
但如果反过来,在父类(super class)中定义__gt__
,在子类中定义__lt__
,那么它会在__lt__
中排序子类
如果两个方法名称相同(都是 lt
或都是 gt
),显然,子类将覆盖父类(super class),这是应该的。
但似乎当它们不同时,它遵循不同的规则:根据 __lt__
定义的任何内容。我还注意到,即使在一个类中,如果同时定义了 __lt__
和 __gt__
(基于不同的东西,它仍然会按 __lt__
方法)
回到我的问题,我的观察是否正确?由于我是初学者,而且我还没有通读整个 python 文档,有人可以指出我在文档中的什么地方写了这条规则。
最佳答案
list.sort
仅使用 <
比较。 This is documented.
二元运算符,如 <
将首先尝试左侧操作数的方法,除非右侧操作数的类是左侧操作数类的子类。仅当第一个方法缺失或返回 NotImplemented
时,才会考虑另一个操作数的方法。 . <
的左操作数方法是__lt__
, 右操作数的方法是 __gt__
. This is also documented.
因为你所有的列表元素都有相同的类和__lt__
总是成功,只有 __lt__
方法最终被调用。
关于python .sort() 对 __lt__ 的优先级高于 __gt__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48313301/
当试图在 C 中存储大于 32,767 的短整数值时,只是为了看看会发生什么,我注意到打印到屏幕上的结果是我试图存储的数字 - 65,536。例如。如果我尝试将 65,536 存储在一个短变量中,则打
有时,当我在某些情况下运行 locust 时,95% 的值大于最大值。据我了解,95% 意味着 95% 的请求花费的时间比这短。那么 Max 值怎么会小于 95%?我在这里做错了什么。 我还发现只有在
我有一个从 NSStatusItem 显示的 NSPopover。这个 Popover 会时不时地显示 NSAlerts。问题是这些警报总是出现在弹出窗口下方,即使它们成为关键窗口。即使我拖动它,它仍
我正在某个数据集中绘制几条线。几个数据点(下例中的第 13 列)是特殊的,我希望它们用圆圈标记并标记(标签在第 12 列中)。 plot "data.csv" using 0:13 with circ
在我下面的代码中,我有一个高度为 8dp 的白色 View 。蓝色按钮的高度为 10dp,因此理论上它应该显示。然而,事实并非如此。它只显示不在白色 View 正上方的部分。我知道这与海拔有关,但我不
我在 nib 文件的 View 中有一个 mapView,委托(delegate)设置为文件的所有者,导出设置为 IBOutlet MKMapView* mapView; 我遇到的问题是 map 高于
function getNum() { num = $('.slicesinput').val(); num2 = $('.numinput').val(); if (num
Android 的 VelocityTracker 类中的缺陷是,如果 X 方向的速度超过 maxVelocity,它会更改为等于 maxVelocity,Y 方向也相同。但是,这意味着如果我们要20
我们有如下表格。我正在尝试使用发现的一些技巧使其响应 here . 现在的结果是我在 iPhone 上看到了以下内容: header1 header2 etc col1 col2 etc 当我希望 h
我想在同一个 Android 应用程序中使用 AdMob 和 ActionBarSherlock,但我无法将 AdMob 放在屏幕顶部(Sherlock ActionBar 上方)。 有人遇到过类似的
我的 javasacript 源代码是严格的 ascii,我想表示 anger symbol在字符串文字中。这在 javascript 中可能吗? 最佳答案 JavaScript 字符串实际上是 UT
我正在开发一个带有 ActiveX 的网络应用程序,该应用程序使用 FFMPEG 解码视频并使用 VMR9 呈现视频。出于某种原因,每次我尝试放置一些 HTML(即使使用 IFrame)都会导致面板闪
我有一个可以高于页面主体的元素“div”。我希望页面不会向下滚动。我需要一个 CSS 技巧,我不能使用 JS 来获取屏幕高度。有什么想法吗? http://jsfiddle.net/L83aLbk4/
在 WooCommerce 结帐字段中,我试图在结帐表单上将 billing_address_2 设置在 billing_address_1 之上。 所以不是: Street Address Apar
我在使用 AudioKit 时遇到了一个小问题框架: ----> 我无法让 AudioKit 框架拾取高于和低于特定数量的特殊频率。 (频率低于 100Hz 和高于 20kHz) 编辑:我已经在我的
我正在尝试激活我的手机中的应用程序但我需要代码许可我尝试了所有这些来发出声音 android.permission.RECORD_AUDIO android.permission.CAPTURE_AU
我有一个 div,其中的值是 0 标准。我有两个按钮,+ 和 - 当值为 0 时,我希望禁用我的 - 按钮,并且从它被禁用的那一刻起高于 0 我希望启用它。 if (number == 0) {
我使用 metrics=['accuracy'] 编译了一个模型,并且我获得的值始终高于验证准确度 val_acc。例如: Epoch 19/20 53/53 [===================
我这里有一个导航栏代码。当我将鼠标悬停在链接上时,一个 png 图像的小箭头应该显示在它下方的中央。下面的代码在 Firefox 和 Chrome 中运行良好,但在 IE 中,箭头稍微低于 div,因
这是我的 div(父/子)HTML 代码: Arvan Tourism Explore our wonderful Albania.
我是一名优秀的程序员,十分优秀!