我不知道什么时候属性应该是私有的,如果我应该使用属性.
我最近读到,setter和getter不是pythonic,我应该使用属性装饰器.没关系.
但是,如果我有属性,那么不能从类外部设置但可以读取(只读属性).这个属性应该是私有的,私有的我是指下划线,就像那样self._x
?如果是,那么如何在不使用getter的情况下阅读它?我现在唯一知道的方法是写
@property
def x(self):
return self._x
Run Code Online (Sandbox Code Playgroud)
这样我可以读取属性obj.x
但我无法设置它obj.x = 1
所以它没关系.
但是我真的应该关心设置不能设置的对象吗?也许我应该离开它.但是我再也不能使用下划线,因为obj._x
用户读取很奇怪,所以我应该使用obj.x
然后再次用户不知道他不能设置这个属性.
你有什么看法和实践?
我在ubuntu 12.04 32bit上使用pyinstaller 2.0和python2.7创建了可执行文件(所以我认为python也是32bit)。
这是控制台中的一个简单程序(无gui),它连接到TCP / IP服务器并发送帧。它可以在我的32位ubuntu下工作,但不能在32位和64位Windows 7上运行。在Win32bit上,它返回错误“设备未准备好”,而在Win64bit上,它返回错误:“应用程序的体系结构错误”。
可能是什么原因造成的?
这是整个应用程序代码的链接(很小)http://pastebin.com/qj96vpgK
我有与 Redis 持续连接的 Twisted 服务器。我正在使用库https://github.com/fiorix/txredisapi。
问题是 Twisted 有时会失去与 Redis 的连接并在不久之后重新连接。我不知道为什么。同样的事情发生在我的本地机器和我的在线 VPS 上。
日志:
2013-04-12 11:25:34+0200 [RedisProtocol,client] <twisted.internet.tcp.Connector instance at 0xf6c45d4c> will retry in 10 seconds
2013-04-12 11:25:34+0200 [RedisProtocol,client] Stopping factory <lib.txredisapi.txredisapi.RedisFactory instance at 0xf6c45ccc>
2013-04-12 11:25:45+0200 [-] Starting factory <lib.txredisapi.txredisapi.RedisFactory instance at 0xf6c45ccc>
2013-04-12 11:30:47+0200 [RedisProtocol,client] <twisted.internet.tcp.Connector instance at 0xf6c45d4c> will retry in 10 seconds
2013-04-12 11:30:47+0200 [RedisProtocol,client] Stopping factory <lib.txredisapi.txredisapi.RedisFactory instance at 0xf6c45ccc>
2013-04-12 11:30:58+0200 [-] Starting factory <lib.txredisapi.txredisapi.RedisFactory instance at 0xf6c45ccc>
2013-04-12 11:35:59+0200 [RedisProtocol,client] <twisted.internet.tcp.Connector instance …
Run Code Online (Sandbox Code Playgroud) 我正在编写基于WebSocket协议的服务器和客户端.
服务器是使用Python和Twisted制作的.
现在我可以将二进制数据从服务器发送到客户端并返回,唯一的问题是,根据一些消息来源,浏览器发送的二进制数据的字节顺序是基于机器字节顺序的.我想确定,这是真的吗?
如果这是真的,那么我应该以某种方式检查端点客户端有什么,并使用他的字节序读取/向他发送数据?检查客户端字节顺序的最佳方法是什么,只需从客户端发送即可
var view_buffer = new UInt8Array(new ArrayBuffer(1));
view_buffer[0] = 1;
Run Code Online (Sandbox Code Playgroud)
这个数据,并检查服务器是否返回1或128?
我正在尝试为使用高速公路的应用程序编写单元测试。
我想测试我的控制器,它从协议获取接收的数据,解析它并对其做出反应。
但是当我的测试达到协议应该断开连接()的程度时self.sendClose
,它会引发错误
exceptions.AttributeError: 'MyProtocol' object has no attribute 'state'.
Run Code Online (Sandbox Code Playgroud)
我试图makeConnection
使用proto_helpers.StringTransport
,但后来我也有错误
exceptions.AttributeError: StringTransport instance has no attribute 'setTcpNoDelay'`
Run Code Online (Sandbox Code Playgroud)
我正在使用trial
并且不想运行虚拟服务器/客户端仅用于测试目的,因为不建议这样做。
我应该如何编写测试,以便可以使用假连接和试用来测试发送数据、读取数据、断开连接等功能?
我只想澄清一些事情.
我相信Django服务器是异步工作的(因为如果来自客户端的每个请求都会阻塞服务器,那么它将无法工作),但我也知道Django ORM不是异步的.那么对数据库的查询会阻塞服务器吗?(我的意思是休息请求等待查询完成?)或者它可能完全不同,我误解了它.
我问这个是因为我听说大多数ORM是阻塞的,因此我不能在我的Twisted服务器中使用它们从db获取数据而不会阻塞扭曲.
我需要的脚本将使用Python和C的相同输出计算crc32.
我现在正在使用zlib.crc32,但是对于C,没有这样的库,我们基于维基百科自己编写它.但它没有返回相同的值.
这是我们的C脚本代码(从维基百科复制,基于RFC):
unsigned int crc32( unsigned char *message, unsigned int n )
{
//int i, crc;
unsigned int crc;
unsigned int i;
unsigned int byte, c;
const unsigned int g0 = 0xEDB88320, g1 = g0>>1,
g2 = g0>>2, g3 = g0>>3, g4 = g0>>4, g5 = g0>>5,
g6 = (g0>>6)^g0, g7 = ((g0>>6)^g0)>>1;
i = 0;
crc = 0xFFFFFFFF;
//while ((byte = message[i]) != 0)
while( i != n)
{
byte = message[i]; // Get next byte.
// byte …
Run Code Online (Sandbox Code Playgroud) python ×5
twisted ×3
asynchronous ×2
python-2.7 ×2
websocket ×2
32bit-64bit ×1
autobahn ×1
c ×1
crc32 ×1
database ×1
disconnect ×1
django ×1
endianness ×1
exe ×1
javascript ×1
orm ×1
private ×1
properties ×1
pyinstaller ×1
readonly ×1
redis ×1
windows-7 ×1