我有一个类:
class A:
def __init__(self):
self.data = {}
Run Code Online (Sandbox Code Playgroud)
在某些时刻我想禁止self.data字段修改.
我已阅读PEP-416拒绝通知,有很多方法可以做到这一点.所以我想找到它们是什么.
我试过这个:
a = A()
a.data = types.MappingProxyType(a.data)
Run Code Online (Sandbox Code Playgroud)
这应该工作,但首先,它的python3.3 +和第二,当我这样做"禁止"多次我得到这个:
>>> a.data = types.MappingProxyType(a.data)
>>> a.data = types.MappingProxyType(a.data)
>>> a.data
mappingproxy(mappingproxy({}))
Run Code Online (Sandbox Code Playgroud)
虽然如果mappingproxy({})我要"禁止"很多次,那会好得多.检查isinstance(MappingProxyType)是一个选项,但我认为可以存在其他选项.
谢谢
可以说我有两个班:
class A : public QObject {};
class B : public QObject {};
Run Code Online (Sandbox Code Playgroud)
那我去
QObject *a = new A();
QObject *b = new B();
Run Code Online (Sandbox Code Playgroud)
现在,我如何确保"a"是A类的实例,而"b"是B类的实例?
目前我这样做:
if (a->inherits(A::staticMetaObject.className())) {
...
} else if (a->inherits(A::staticMetaObject.className())) {
...
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我想根据当前目录中的默认 makefile 是否包含某个目标在 shell 中运行某些操作。
#!/bin/sh
make -q some_target
if test $? -le 1 ; then
true # do something
else
false # do something else
fi
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为如果目标不存在,GNU make 会返回错误代码 2,否则返回 0 或 1。问题是没有以这种方式记录。这是男人的一部分:
-q, --question
``Question mode''. Do not run any commands, or print anything;
just return an exit status that is zero if the specified targets
are already up to date, nonzero otherwise.
Run Code Online (Sandbox Code Playgroud)
仅区分零/非零。这样做的正确方法是什么?
我需要检查MySQL以查看两个日期间隔是否相交.为了更好地解释我的问题:我有一个事件管理模块.如果我们有一个像这样添加的事件:
开始日期 :
'2013-09-09 08:00:00'结束日期 :
'2013-09-09 10:00:00'
现在我想添加另一个像这样的事件:
开始日期 :
'2013-09-09 09:00:00'结束日期 :
'2013-09-09 11:00:00'
或者像这样:
开始日期 :
'2013-09-09 07:00:00'结束日期 :
'2013-09-09 12:00:00'
我不应该这样做,因为在该时间间隔内已经添加了一个事件(08-10)
对于第一个例子(case A),我通过这样做解决了这个问题:
SELECT * FROM `events` as e
where
'2013-09-09 08:00:00' between e.ev_date_start and e.ev_date_end -- date start
OR
'2013-09-09 11:00:00' between e.ev_date_start and e.ev_date_end -- date end
Run Code Online (Sandbox Code Playgroud)
但对于第二种情况(case B),我很难搞清楚......
我有两个32位有符号整数EAX和EBX分别.如果我做:
xor EDX, EDX
idiv EBX
Run Code Online (Sandbox Code Playgroud)
然后,EAX被视为无符号32位,这是错误的.MOVSX似乎无法将唱歌点扩展EAX到EDX:EAX.我也试着玩CMP和SBC,但我没能找到解决的办法.
我想知道最短的代码,或者至少是避免跳转的代码.