小编efo*_*nis的帖子

Python:如何从类装饰器中访问装饰类的实例?

这是我的意思的一个例子:

class MyDecorator(object):    
    def __call__(self, func):
        # At which point would I be able to access the decorated method's parent class's instance?
        # In the below example, I would want to access from here: myinstance
        def wrapper(*args, **kwargs):
            return func(*args, **kwargs)
        return wrapper

class SomeClass(object):
    ##self.name = 'John' #error here
    name="John"

    @MyDecorator()
    def nameprinter(self):
        print(self.name)

myinstance = SomeClass()
myinstance.nameprinter()
Run Code Online (Sandbox Code Playgroud)

我需要装饰实际的课吗?

python decorator

6
推荐指数
1
解决办法
597
查看次数

GetPrivateProfileString奇怪

我只是在.NET中调用kernel32中的GetPrivateProfileString和GetPrivateProfileSection,并遇到了一些我不理解的奇怪事情.

让我们从这个咒语开始:

    Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString() As Char, _
    ByVal nSize As Int32, _
    ByVal lpFileName As String) As Int32
Run Code Online (Sandbox Code Playgroud)

如果我传递一个lpApplicationName(section),没有lpKeyName而没有lpDefault,我应该得到该部分的所有密钥,而且确实是这样:50%的时间.

如果ini文件在第一行开始有lpApplicationName,则缓冲区不返回任何内容.如果lpApplicationName统计信息位于文件的第二行,则返回预期值.

起初我虽然是在Declare中使用W版本和Unicode的问题,但改变它们似乎没有任何效果.

我错过了什么?

unicode winapi ini encoding

5
推荐指数
1
解决办法
2739
查看次数

Win32 WM_SETCURSOR、WM_MOUSEMOVE 总是成对的?

我正在处理 Win32 控件。此控件上可能有数百个“项目”。这些不是窗口,而是内部对象(例如:矩形)。根据鼠标位置,我想更改鼠标光标。没关系,我可以使用 WM_SETCURSOR。

同时基于鼠标移动,我想显示一个状态栏,显示当前鼠标下对象的详细信息。为此,我可以使用 WM_MOUSEMOVE。

因为可能有数百个项目,移动所有项目在鼠标下找到一个,效率不高,尤其是两次(一次用于设置光标,一次用于鼠标移动)。

简而言之,您知道 WM_SETCURSOR 和 WM_MOUSEMOVE 是否总是成对的吗?在这种情况下,我可以在 WM_SETCURSOR 期间计算我想要的。另一种选择是在 WM_MOUSEMOVE 期间设置鼠标光标,但据我所知,这不是一个好的解决方案(会闪烁)。

谢谢

winapi controls

5
推荐指数
1
解决办法
5291
查看次数

将消息从子类传递到原始WndProc

我一直在阅读有关子类化的MSDN文档,我已成功处理子类中的事件

我的问题是将消息传递回原始的WndProc.

例如,如果我有一个窗口,具有子类别组框控件和一个按钮作为该组框的子项,我想处理原始窗口过程中的按钮事件,而不是子类化的组框过程.

基本上,我想要一个空的子类过程:

LRESULT FAR PASCAL SubClassFunc(HWND hwnd,
                        UINT uMsg,
                WPARAM wParam,
                LPARAM lParam)
{
    return CallWindowProc(oldProc, hwnd, uMsg, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)

oldProc的位置是:

FARPROC oldProc = (FARPROC)SetClassLong(group_box, GCL_WDPROC, (DWORD)SubCLassFunc);
Run Code Online (Sandbox Code Playgroud)

窗口和组框和按钮的位置是:

HWND window = CreateWindowEx(
    WS_EX_WINDOWEDGE, 
    appname,
    TEXT("Subclass Test"),
    WS_VISIBLE |WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    300,
    400,
    NULL,
    NULL,
    hInstance,
    0);

HWND group_box = CreateWindowEx(
    0,
    TEXT("BUTTON"),
    TEXT("Group Box"),
    WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
    8,
    8,
    275,
    350,
    window,
    NULL,
    hInstance,
    0);

HWND push_button = CreateWindowEx(
    0,
    TEXT("BUTTON"),
    TEXT("Push Button"), …
Run Code Online (Sandbox Code Playgroud)

c user-interface winapi

5
推荐指数
1
解决办法
2473
查看次数

如何将多字符串转换为C#字符串集合?

多字符串(双空格终止的空字符串字符串)在Windows API中很常见.将从API返回的多字符串转换为C#字符串集合的好方法是什么,反之亦然?

我对正确处理字符编码特别感兴趣(稍后是Windows XP).

以下方法似乎可以创建多字符串,但我没有解码多字符串的示例.

static string StringArrayToMultiString(
    ICollection<string> stringArray
    )
{
    StringBuilder multiString = new StringBuilder();


    if (stringArray != null)
    {
        foreach (string s in stringArray)
        {
            multiString.Append(s);
            multiString.Append('\0');
        }
    }

    return multiString.ToString();
}
Run Code Online (Sandbox Code Playgroud)

c# string winapi

5
推荐指数
1
解决办法
6214
查看次数

获取与正在运行的应用程序关联的图标

拥有打开的应用程序的窗口句柄,我可以使用GetWindowText函数从应用程序的标题栏中检索文本.我想更进一步,并检索与同一个应用程序关联的图标.

我该怎么做呢?我查看了我认为相关的Win32 API部分,但没有任何内容跳出来.

任何指针将不胜感激.

提前致谢!

c# winapi

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

在Python中检测Windows注销

当我在python中注销Windows时,如何检测或通知?

编辑:Martinv.Löwis的回答很好,并且可以完全注销,但它不能用于"快速用户切换"事件,例如按下win + L,这是我真正需要的.

编辑:我不使用gui这是作为服务运行

python winapi

5
推荐指数
1
解决办法
2392
查看次数

缓存非视图返回

我对视图有十几个权限查询,确保用户具有在系统上执行某些操作的正确权限(即确保他们在正确的组中,如果他们可以编辑他们的个人资料,如果他们是组管理员,等等).

支票可能如下所示:

from django.contrib.auth.decorators import user_passes_test

test_canvote = lambda u: u.has_perm('polls.can_vote')

@user_passes_test(test_canvote)
def my_view(request):
    # ...
Run Code Online (Sandbox Code Playgroud)

这实际上是来自Django教程的代码(我的有点丑陋).有时检查是数据库密集型的,会触发多个查询.由于许多用户访问权限检查页面,事情很快就会变得很慢.

我的问题是,我可以(在你的帮助下)为user_passes_test装饰器构建一个包装器(或替换件),该装饰器在缓存中搜索一个键'TESTCACHE' + user.pk + 'testname',如果它不存在,则执行测试并保存其结果.

我之前从未写过装饰器,但我想它看起来几乎与那个装饰器相同user_passes_test,只是将测试作为字符串传递:

@cached_user_passes_test('test_canvote')
def my_view(request):
   # ...
Run Code Online (Sandbox Code Playgroud)

和以前一样,让我知道我是否疯了,或者Django是否已经为我做过这样的事情(所以我在其他地方遇到了问题).

Edit: The standard decorators can be found here: http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/decorators.py

I think it might be easier replacing user_passes_test than wrapping it so here's the starting point. Of course, if you feel I'm incorrect in that statement, let me know:

try:
    from functools import update_wrapper, wraps
except ImportError:
    from …
Run Code Online (Sandbox Code Playgroud)

python django decorator django-cache

5
推荐指数
1
解决办法
345
查看次数

在Python中,什么是装饰器何时大大简化任务的例子?

试图找到装饰器何时真正有益的例子,而不是那么多.示例代码表示赞赏.

python decorator

5
推荐指数
2
解决办法
446
查看次数

在装饰器中使用self是不好的做法吗?

虽然我知道你不能self直接在装饰器中引用,但我想知道通过拉动它来解决这个问题是不好的做法args[0].我的预感是,但我想确定.

更具体地说,我正在开发一个Web服务的API.大约一半的命令需要传递令牌,稍后可以使用它来撤消它.我想要的是使该标记成为可选参数,如果没有提供,则生成一个.生成令牌需要对服务器进行经过身份验证的调用,该服务器需要来自对象的数据.

虽然我知道我能做到:

def some_command(self, ..., undo_token = None):
    if undo_token = None:
        undo_token = self.get_undo_token()
    ...
    return fnord
Run Code Online (Sandbox Code Playgroud)

我觉得有一种更好的方法,而不是在十几种方法中使用相同的代码.我的想法是写一个装饰者:

@decorator
def undoable(fn, *args, **kwargs):
    if 'undo_token' not in kwargs:
        kwargs['undo_token'] = args[0].get_undo_token()
    return (fn(*args, **kwargs), kwargs['undo_token'])
Run Code Online (Sandbox Code Playgroud)

所以我可以更干净地写

@undoable
def some_command(self, ...):
    ...
    return foo

@undoable
def some_other_command(self, ...):
    ...
    return bar
Run Code Online (Sandbox Code Playgroud)

我是否因为遇到麻烦而陷入困境?

python decorator

5
推荐指数
1
解决办法
639
查看次数