- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 python 文档中的以下示例感到有点困惑 here .
>>> class inch(float):
... "Convert from inch to meter"
... def __new__(cls, arg=0.0):
... return float.__new__(cls, arg*0.0254)
...
>>> print inch(12)
0.3048
>>>
据推测,这里的 float 是在 Python 深处某处定义的实际 float 类。当我们调用 float.__new__(cls, argument)
时,我们偷偷调用了为给定参数返回 float 实例的函数,但我们将它传递给 inch 类而不是 float 类.既然 inch 类并没有真正做任何事情,为什么它会起作用呢?
最佳答案
因为inch
是float 的子类,它满足float.__new__()
实例工厂的所有要求。这是__new__(cls)
static method的工作创建第一个参数的实例,而不是它的“自己”类的实例。
请注意此处的“静态方法”一词。 __new__
工厂实际上只是出于继承原因而绑定(bind)到类的专用函数。换句话说,它是一个在面向对象的层次结构中发挥良好的功能。您应该通过 super()
找到它,或者直接调用它(如此处完成)。以下实际上会更像 pythonic:
def __new__(cls, arg=0.0):
return super(inch, cls).__new__(cls, arg*0.0254)
因为如果 inch
被用于多重继承层次结构,那将调用“正确的”__new__
函数;在这个简单的示例中,它最终会调用 float.__new__
。
因此,__new__(cls, ...)
应该创建类型为 cls
的实例。那么为什么要把它绑定(bind)到一个类而不是让它成为一个更通用的函数呢?因为在 float.__new__(cls, value)
的情况下,它不仅创建了 cls
类型的新实例,还将其初始值设置为 value
。为了让它工作,float.__new__(...)
需要深入了解 float
类的外观。因为 inch()
是 float()
的子类,所以它也具有成为 float()
的完全相同的必要位,因此当 float.__new__()
工厂创建一个新的 inch
实例时,所有这些位都会使它成为一个 inch()
实例。
关于Python:当 cls 不是 float 时,为什么 float.__new__(cls) 可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13534461/
我从自己的项目中引用了一个不符合 CLS 的现有 DLL。当我将我的程序集标记为符合 CLS 时,我收到编译器警告,指出引用的程序集中的名称不符合 CLS。 有没有一种方法可以使我的程序集符合 CLS
我有一个 python 程序,我试图在命令提示符下使用 ANSI 代码以彩色文本打印“Hello”。当我正常打印时,它不工作,它只是打印?和文本,但是当我在清除命令提示符后打印它时它工作正常。有人可以
CLS 允许类中代码的私有(private)部分不符合 CLS。这怎么可能,因为最终代码需要转换为 IL? 最佳答案 CLS 代表通用语言规范。为简化起见,它基本上是所有 .NET 语言必须了解的最少
只是为了我的澄清: 我能否在 .NET Framework 中抛出符合 CLS 和不符合 CLS 的异常?我正在使用 C# 3.0。 当我捕捉到异常时 catch(Exception ex) { }
难道 super(cls, instance) 和 super(cls, subclass) 都返回 cls 的父类(super class)吗? 最佳答案 差别很大; super() 使用类型(类)
我如何在 javasciript 中进行原型(prototype)继承。通常我这样做和 derivedFn.prototype = object.create(clsParent.prototype
我对 python 文档中的以下示例感到有点困惑 here . >>> class inch(float): ... "Convert from inch to meter" ...
我以前从未见过其他任何东西像这样工作。 还有其他的东西可以做到这一点吗? >>> class NothingSpecial: @classmethod def meth(cls):
在Python中,假设obj类型为objtype ,是super(cls,obj)和super(cls,objtype)相同? super(cls,obj) 是否正确?转换obj到另一个对象,其类是
如果我有一个项目并将其标记为 我是否需要在项目中的每个类之前放置CLSCompliant(True),还是它们都默认为CLSCompliant? 最佳答案 在程序集级别添加 CLSCompliant
python unittest有没有办法从文件中读取参数并将其分配给setUpClass(cls)? 例: 我有json文件,其中包含: { "browserType" : "Chrome",
我正在使用 .net Framework 3.5 并在我的项目中使用 RDLC 文件进行报告。我面临的问题是,在我的数据集中,我有一个以数字命名的字段“63”,每当我在我的 RDLC 文件中使用它时,
我正在尝试用 C 语言编写 Snake,但目前我刚刚编写了一个可变长度和宽度的矩阵。由于我希望游戏(即 map )不断刷新,所以我尝试这样编写代码,但“刷新效果”不太好看到。我能做什么? #inclu
这个问题在这里已经有了答案: Why is this name with an underscore not CLS Compliant? (8 个答案) 关闭 9 年前。 我有一个类,它包含三个字
如何使程序集/类符合 CLS?他们应该有什么标准?如果我只是用 [assembly: CLSCompliant(true)] 注释我的程序集并且我的类型之一不符合 CLS,它会影响程序集的行为吗? 最
我在构建项目时遇到错误: Warning as Error: Type of 'OthersAddresses.AddresseTypeParameter' is not CLS-compliant
我目前正在阅读 Albahari 的 C# 3.0 in a Nutshell并在第241,在谈到数组索引时,他是这样说的: Nonzero-based arrays are not CLS (Com
我在 C# 类库中有以下代码... public static class foo { public enum bar { bsNone = -1, b
我有一个 .NET 3.5 C# 项目,它的命名空间为 SampleNamespace.Tools.Sample。 如果我将名为“Samplenamespace.Utils.Example”的程序集添
今天我在查看别人的代码,看到了这个: class A(B): # Omitted bulk of irrelevant code in the class def __init__(s
我是一名优秀的程序员,十分优秀!