这是我在昨晚被拒绝的采访中无法回答的两个问题.
我继承了一个项目,其中包含许多大类,只有类对象(整数,字符串等).我希望能够检查属性是否存在而无需手动定义属性列表.
是否可以使用标准语法使python 类本身可迭代?也就是说,我希望能够使用for attr in Foo:(或甚至)迭代所有类的属性,if attr in Foo而无需首先创建类的实例.我想我可以通过定义来做到这一点__iter__,但到目前为止我还没有完全掌握我正在寻找的东西.
我通过添加如下__iter__方法实现了我想要的一些:
class Foo:
bar = "bar"
baz = 1
@staticmethod
def __iter__():
return iter([attr for attr in dir(Foo) if attr[:2] != "__"])
Run Code Online (Sandbox Code Playgroud)
但是,这并不能完全满足我的需求:
Run Code Online (Sandbox Code Playgroud)>>> for x in Foo: ... print(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'classobj' object is not iterable
即便如此,这仍然有效:
Run Code Online (Sandbox Code Playgroud)>>> for x in Foo.__iter__(): ... print(x) bar baz
我刚刚安装了Wireshark,但是当我单击时capture > interfaces,会出现对话框,但它不包含我的网络接口.
点击capture > interfaces它时,如下面的屏幕截图所示.是什么导致这个?
对于这个特定项目,我无法使用C++ 11功能(例如decltype),因为编译器还不支持它们.我需要能够提供当前类作为模板参数,最好是在没有参数的宏中(见下文),而不需要修饰class声明或隐藏花括号等.
class Foo: private Bar<Foo> {
MAGIC //expands to using Bar<Foo>::Baz; and some others
public:
void otherFunction();
//... the rest of the class
};
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望这与Qt的Q_OBJECT宏非常相似,但不会引入另一个预编译步骤和相关的生成类.typeid可能在运行时很有用,但我的目标是在构建时完成所有这些.
如何编写MAGIC宏以便每次都不需要重复类名?
我的手上有一个有趣的情况,我不太清楚如何进行故障排除.我做了一些类似于我的情况的搜索,但没有什么比得上它.如果答案已存在于某处,我将非常感谢任何可以指出我正确方向的人.
好的,到了这一点.
我正在编写一个用于监控互联网连接的监视应用程序.它设计为以设定的间隔对一组域进行ping操作,当它们中的任何一个响应ping时,状态定时器将被重置.如果状态计时器超过设定的阈值,则尝试多个纠正措施阶段来解决问题.
够简单吧?
这就是它变得奇怪的地方.
我正在使用ICMPsendecho发出ping请求.在我的开发环境(win7)上,它似乎工作正常,测试并且一切顺利.但是,在部署它的环境中,它无法收到响应.部署环境是Windows XP sp3机器.
在整个故障排除过程中,我注意到了一些事情,这些事情可能会或可能没有帮助实际解决这个问题.
windows ping.exe在我用于测试连接状态的所有域的部署环境中工作正常,它只有我的ICMPsendecho调用似乎无法生成响应.
我在部署环境中安装了wireshark,我可以看到两种类型的ping请求成功发出数据包.windows ping生成长度为74字节的请求数据包,我的程序调用生成长度为42字节的数据包.Windows响应数据包在接收时类似于74个字节.
安装wireshark后,切换到开发环境一分钟.Windows ping会在包含部署环境时生成类似的情况.但是,我的应用程序在生成请求时,数据包长度为42个字节(与部署环境相同),但它收到的响应长度为60个字节.
正如我所说,这些信息可能有用,也可能没有用,但我试图找出为什么这个应用程序无法生成ICMP响应,因为Windows ping似乎在该机器上正常工作.
可能有帮助的另一个小小的问题,互联网连接正在监控使用AT&T提升4g热点,实际设备是sierra无线MC8790 AirPrime卡.
谁有任何关于为什么这些ping失败的想法?
提前感谢您提供的任何有用信息,并花时间阅读我的帖子.
PS.