小编sch*_*tte的帖子

为什么 OrderedDict 没有实现比较运算符

今天早些时候我问了一个问题,因为我无法真正理解使用丰富比较方法的比较运算符的实现。感谢您对已接受的答案很好地解释了两者之间的差异。

基本上,据我所知,Python 3 停止使用__cmp__()魔法方法。从现在开始,

当操作数没有有意义的自然排序时,排序比较运算符(<、<=、>=、>)会引发 TypeError 异常。

因此,我认为这OrderedDict是有效的。但是,令我惊讶的是,

d1 = OrderedDict([(1,1)])
d2 = OrderedDict([(2,2)])
>>> dict1 < dict2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'collections.OrderedDict' and 'collections.OrderedDict'
>>> dict1.__lt__(dict2)
NotImplemented
Run Code Online (Sandbox Code Playgroud)

那么,为什么不OrderedDict实现比较运算符呢?

请注意,在链接问题的答案的评论中,我们开始谈论该主题。有下划线的一件事是,为什么假设插入顺序是您想要比较事物的方式?您始终可以实现自己的方式来明确比较它们

那为什么(即使在 Python 3 中),

list1 = [1,2,3]
list2 = [4,5,6]
>>> list1 < list2
True
Run Code Online (Sandbox Code Playgroud)

不是类似的情况吗?

python comparison-operators python-3.x

2
推荐指数
1
解决办法
800
查看次数

为什么类变量从方法和外部读取是不同的?

所以,我创建了一些课程

class Some:
    @classmethod
    def __init__(cls, somevar):
        cls.somevar = somevar

    @classmethod
    def read(cls):
        return cls.somevar
Run Code Online (Sandbox Code Playgroud)

现在我尝试在外部设置变量并从类中读取它:

instance = Some([1, 2, 3])
instance.somevar = [4, 5, 6]
print(instance.read())

>>>> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

但是在类外调用相同的命名变量会给我预期的输出,

print(instance.somevar)
>>>> [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我对OOP的误解是什么?

编辑

我的目标是创建Some具有自己值的多个实例.

python oop

2
推荐指数
1
解决办法
61
查看次数

如何使用继承在python中使用定义父对象?

我愿与参数的一类系统:sysname,temp,N

并创建一个子类Molecule,它使用继承从System获取参数.

class System() :
    def __init__(self,sysname,temp,N):
        self.sysname=sysname
        self.temp=temp
        self.syslist=[]
        self.N=N


class Molecule(System) :
    def __init__(self,name,position,mass,radius):
        self.name=name
        self.position=position
        self.mass=mass
        self.radius=radius
        self.epsilon=1
        self.sigma=1
        self.syslist.append(self)
Run Code Online (Sandbox Code Playgroud)

我可以将System的一个实例作为

System1=System("system1",100,10)
System2=System("system2",120,10)
Run Code Online (Sandbox Code Playgroud)

现在在定义分子时,我该如何定义它属于哪个系统?

另外,请告诉我的班级定义是否有其他问题

python oop inheritance class python-2.7

1
推荐指数
1
解决办法
64
查看次数

Python 3中的io.StringIO vs open()

我能找到的就是这句话:

创建文本流的最简单方法是使用open(),可选择指定编码:

f = open("myfile.txt", "r", encoding="utf-8")

内存中的文本流也可用作StringIO对象:

f = io.StringIO("some initial text data")

但是,这根本没有给我什么时候应该使用open(),io.StringIO反之亦然.我知道他们在幕后的工作方式并不完全相同.但是为什么有人会open()用Python 3呢?

python python-3.x

1
推荐指数
1
解决办法
2445
查看次数

PowerShell计算错误

偶然我遇到了这个简单的数学方程式,PowerShell出错了.

PS 99.804-99.258
0.546000000000006

PS 10.804-10.258
0.546000000000001
Run Code Online (Sandbox Code Playgroud)

这让我很好奇,我尝试了一些不同的计算器,大多数计算器都正确并返回

0.546
Run Code Online (Sandbox Code Playgroud)

和:

PS 1.804-1.258
0.546
Run Code Online (Sandbox Code Playgroud)

也是对的.但我发现其他计算器也返回了错误的结果:

0.54600000000001
0.545999999999999999
0.5460000000000065
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?如何在PowerShell中获得正确的结果?

math powershell

1
推荐指数
1
解决办法
92
查看次数

C#-为什么VS 2017灰显事件对象上的null检查?

对事件对象执行空检查时,Visual Studio会将代码颜色更改为浅灰色。如果我没记错的话,通常意味着这行是不必要的。显然,在我的情况下不是这样(或者是?)。请参阅下面的示例:

 public event PropertyChangedEventHandler PropertyChanged;

    string test; 

    protected void OnPropertyChanged (string propertyName)
    {
        if (PropertyChanged != null) {    //This line is grey
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }  //This line is grey
        if (test != null) {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是屏幕截图: 在此处输入图片说明

c# visual-studio visual-studio-2017

0
推荐指数
1
解决办法
127
查看次数