小编zee*_*kay的帖子

覆盖__getattr__以支持动态嵌套属性

如果要动态创建和引用嵌套属性,最好的方法是什么?

我正在编写一个简单的Flickr客户端,并希望尽可能地匹配所记录的API,而不是实际定义每个方法.例如,要向Flickr的flickr.people.getInfoAPI方法发出请求:

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)

python getattr

15
推荐指数
1
解决办法
1820
查看次数

node.js socket.io简单聊天

我开始玩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)

node.js socket.io

7
推荐指数
2
解决办法
1万
查看次数

wxMyageBox在wxPython中带有自动关闭计时器

平台: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中执行此操作的任何想法?

python wxpython auto-close

4
推荐指数
1
解决办法
4737
查看次数

标签 统计

python ×2

auto-close ×1

getattr ×1

node.js ×1

socket.io ×1

wxpython ×1