小编Ari*_*iel的帖子

python属性查找过程如何工作?

当我说"python属性查找进程"时,我的意思是:当你编写x.foo时python会做什么?

搜索网络我没有找到很多关于这个的文档,我发现的最好的论文之一恢复了以下步骤的过程(你可以在这里看到完整的文章)

  1. 如果attrname是objectname的特殊(即Python提供的)属性,则返回它.
  2. 检查objectname .__ class __.__ dict__是否为attrname.如果它存在且是数据描述符,则返回描述符结果.在同一案例中搜索objectname .__ class__的所有基础.
  3. 检查objectname .__ dict__是否为attrname,如果找到则返回.如果objectname是一个类,也搜索它的基础.如果它是一个类并且它或其基础中存在描述符,则返回描述符结果.
  4. 检查objectname .__ class __.__ dict__是否为attrname.如果它存在且是非数据描述符,则返回描述符结果.如果它存在,并且不是描述符,则返回它.如果它存在并且是数据描述符,我们不应该在这里,因为我们将在第2点返回.搜索objectname .__ class__的所有基础以查找相同的情况.
  5. 提升AttributeError.

起初这可能看似正确,但属性查找过程稍微复杂一些,例如对于x.foo,如果x是类或实例,它的行为不一样.

我找到了一些无法通过这种方式解释的样本.考虑以下python代码:

class Meta(type):
    def __getattribute__(self, name):
        print("Metaclass getattribute invoked:", self)
        return type.__getattribute__(self, name)

    def __getattr__(self, item):
        print('Metaclass getattr invoked: ', item)
        return None

class C(object, metaclass=Meta):
    def __getattribute__(self, name):
        print("Class getattribute invoked:", args)
        return object.__getattribute__(self, name)

c=C()
Run Code Online (Sandbox Code Playgroud)

现在使用相应的输出检查以下行:

>> C.__new__
Metaclass getattribute invoked: <class '__main__.C'>
<built-in method __new__ of type object at 0x1E1B80B0>

>> C.__getattribute__
Metaclass …
Run Code Online (Sandbox Code Playgroud)

python attributes python-datamodel

24
推荐指数
1
解决办法
4433
查看次数

用于在运行时生成字符串的文本模板(如Razor或T4)

网络上是否有可用于从模板生成字符串的工具,我正在寻找类似于Razor的东西.

字符串应该能够在运行时生成,并且不依赖于Visual Studio(如T4).框架应该在Silverlight中工作.

RazorEngine是一个符合requeriments的框架,但在Silverlight中不起作用.

提前致谢.

c# silverlight t4 razor

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

可以使用DLR开发静态类型语言吗?

我必须为.NET的静态类型语言开发编译器我正在考虑使用DLR而不是构建所有部分(Lexer/Parser,语法,语义,代码生成).

DLR是否适合这种情况?或者最好直接为.NET构建编译器并避免所有动态调用.

编辑:我确实实现了语言而没有使用DLR提供的任何动态表达式,而是使用了其他表达式.

之后我可以说在实现编译器直接定位DLR而不是IL时会更好.生成的代码仍然非常干净.

如果你想看一些代码检查:tigerconverters.codeplex.com/

c# compiler-construction dynamic-language-runtime language-design

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

可以将DirectX表面绘制到WPF控件吗?

DirectX可用于绘制WPF控件上的一组点(或WPF可以使用的东西).

我需要在WPF中实现一个控件,该控件应绘制16k点,更新速率为30 Hz,现在我的解决方案已经用完了.

这个想法来自这个问题的评论.

任何帮助将非常感激.

c# directx wpf controls rendering

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

检测Silverlight中是否打开或关闭CapsLock

您可能会发现是否已按下CapsLock键订阅KeyDown/KeyUp事件.然后根据该输入切换CapsLock的状态.这种方法的问题是您需要CapsLock键的初始状态才能开始切换.

一个应用程序可能是在登录页面上给用户一个通知(这是我需要的).

顺便说一句,我正在使用Silverlight 5.

编辑

这里发布的解决方案说:

然而,您可以通过使用实际在onKeyDown发送的KeyEventArgs.PlatformKeyCode来查明Capslock是否已启用.您可以在此处查找大写密钥的虚拟密钥代码:http: //msdn.microsoft.com/en-us/库/ ms927178.aspx

使用此解决方案,您无法确定CapsLock状态,因为KeyEventArgs.PlatformKeyCode返回"表示按下或释放的键的整数值(取决于引发的事件)".所以,如果大写锁定已打开,并且按键A,那么KeyEventArgs.PlatformKeyCode = 65,并且在另一方面,如果大写锁定已关闭,按下键A,然后KeyEventArgs.PlatformKeyCode = 65.

换句话说,您无法根据KeyEventArgs.PlatformKeyCode属性确定CapsLock是否已启用.


这个问题的答案似乎也有一个解决方案,它检查两件事:

  1. 键入的字母为大写,而未按下Shift键
  2. 键入的字母为小写,按下Sift

这两种情况都暗示CapsLock是On,但是这个解决方案也存在问题,给定一个KeyEventArgs,您可以知道键盘中按下的键,但无法知道该键输出的Char.

c# keyboard silverlight silverlight-5.0

3
推荐指数
1
解决办法
2572
查看次数

为什么C#不接受带有泛型参数的构造函数要求?

使用C#Generics,您可以拥有这样的类:

class Foo<T> where T:new() {}
Run Code Online (Sandbox Code Playgroud)

这意味着类型T应该有一个没有参数的构造函数.如果我们能够:

class Foo<T> where T : new(string)
{
    private T CreateItem()
    {
        string s="";
        return new T(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何理由说微软没有在该语言中添加此功能?

c# generics constructor

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