今天早些时候我问了一个问题,因为我无法真正理解使用丰富比较方法的比较运算符的实现。感谢您对已接受的答案很好地解释了两者之间的差异。
基本上,据我所知,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)
不是类似的情况吗?
所以,我创建了一些课程
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具有自己值的多个实例.
我愿与参数的一类系统: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)
现在在定义分子时,我该如何定义它属于哪个系统?
另外,请告诉我的班级定义是否有其他问题
我能找到的就是这句话:
创建文本流的最简单方法是使用open(),可选择指定编码:
f = open("myfile.txt", "r", encoding="utf-8")内存中的文本流也可用作StringIO对象:
f = io.StringIO("some initial text data")
但是,这根本没有给我什么时候应该使用open(),io.StringIO反之亦然.我知道他们在幕后的工作方式并不完全相同.但是为什么有人会open()用Python 3呢?
偶然我遇到了这个简单的数学方程式,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中获得正确的结果?
对事件对象执行空检查时,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)
python ×4
oop ×2
python-3.x ×2
c# ×1
class ×1
inheritance ×1
math ×1
powershell ×1
python-2.7 ×1