如果要动态创建和引用嵌套属性,最好的方法是什么?
我正在编写一个简单的Flickr客户端,并希望尽可能地匹配所记录的API,而不是实际定义每个方法.例如,要向Flickr的flickr.people.getInfo
API方法发出请求:
flickr = Client()
data = flickr.people.getInfo(user_id='xxx')
Run Code Online (Sandbox Code Playgroud)
在这种情况下,flickr.people.getInfo
直接映射到其API文档中的相应方法.当被调用时,people
并且getInfo
在查找时创建,然后正确的请求由路径确定getInfo
,即people.getInfo
.这是我使用的方法:
class Attr(object):
def __init__(self, client, name, parent):
self._client = client
self._name = name
self._parent = parent
def __getattr__(self, name):
attr = Attr(self._client, name, self)
setattr(self, name, attr)
return attr
def _get_path(self, path=None):
if path:
path = '.'.join((self._name, path))
else:
path = self._name
if isinstance(self._parent, Attr):
return self._parent._get_path(path)
return path
def __call__(self, *args, **kwargs):
return self._client.execute_method(self._get_path(), *args, **kwargs)
class …
Run Code Online (Sandbox Code Playgroud) 我开始玩node.js和大家一样,我想聊聊天.
我的想法是在端口9090中使用socket.io运行node.js,在端口8080中运行我的客户端html.我的html客户端将独立提供服务.
我的服务器:
var sys = require('sys');
var express = require('express');
var io = require('socket.io');
var app = express.createServer();
app.listen(8080);
var socket = io.listen(app);
socket.on('connection', function (client) {
client.on('message', function (msg) {
socket.broadcast(msg);
});
client.on('disconnect', function () {
});
});
Run Code Online (Sandbox Code Playgroud)
我的客户:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="http://cdn.socket.io/stable/socket.io.js"></script>
<script>
$(document).ready(function () {
var socket = new io.Socket("localhost", {port: 8080});
socket.on('connect', function () {
socket.send('A client connected.');
});
socket.on('message', function (message) {
$('div#messages').append($('<p>'), message);
});
socket.on('disconnect', function () {
console.log('disconnected'); …
Run Code Online (Sandbox Code Playgroud) 平台:Windows,OS X.
Python版本:Active State Python 2.7
wxPython版本:2.9版
这是我使用wxMessageBox的示例代码:
import wx,os
class Frame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(100, 100),style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
host=os.system('hostname')
if host!='superman':
self.dialogBox=wx.MessageBox('The host name should be superman. Closing this dialog box in 2s...','Info')
self.Destroy()
else:
self.Center()
self.Show()
if __name__ == '__main__':
app = wx.App(redirect=False)
frame = Frame(None, -1, 'Sample')
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
根据上面的代码,如果主机名不是"超人",则会在用户显示一个消息框并提示按"确定".如果用户按下消息框上的"确定"按钮,则控制移动到代码中的下一行(即行号10),其中帧被销毁.我希望能够自动关闭对话框并转到代码中的下一行,即self.Destroy()
如果用户在接下来的2秒内未按下"确定"按钮.有关如何在wxpython中执行此操作的任何想法?