在Java中,您可以使用匿名内部类内联定义一个新类。当您只需要重写类的单个方法时,这很有用。
假设您要创建一个OptionParser
仅覆盖单个方法的子类(例如exit()
)。在Java中,您可以编写如下代码:
new OptionParser () {
public void exit() {
// body of the method
}
};
这段代码创建了一个匿名类,该类OptionParser
仅扩展和覆盖exit()
方法。
Python中有类似的习语吗?在这些情况下使用哪种习语?
您可以使用type(name, bases, dict)
内建函数即时创建类。例如:
op = type("MyOptionParser", (OptionParser,object), {"foo": lambda self: "foo" })
op().foo()
由于OptionParser不是新式类,因此您必须显式包括object
在基类列表中。
问题内容: 在C#中,您可以将一个类标记为,以便只能从同一包中对其进行访问。Java有什么类似的东西吗? 问题答案: 您可以通过从类的声明中省略安全修饰符(公共,私有)来创建程序包专用类。
问题内容: 我想知道Python是否具有类似C#匿名类功能的东西。为了澄清,这是一个示例C#代码段: 在Python中,我会想象这样的事情: 特定要求是能够在表达式上下文中创建具有指定字段的对象(例如,可在lambda和不允许使用语句的其他地方使用),而无需其他外部声明,并且能够通过普通成员按名称访问各个组件访问语法。创建的对象还应按 组件名称 (而不是像元组那样按位置)实现结构比较。 特别是:元
问题内容: 是否有与Java或JVM语言的Python virtualenv类似的东西? 问题答案: 据我了解,virtualenv使您能够拥有单独的库安装路径,从而有效地分隔“虚拟” Python安装。 Java没有“系统范围内已安装”库(*)的概念:它总是在类路径中搜索要加载的库。由于可以为每个应用程序定义类路径(并且需要将其定义!),因此每个应用程序都可以选择要加载的库和版本。 如果您更深入
问题内容: 开始使用C#学习LINQ。 尤其是LINQ to Objects和LINQ to XML。 我真的很喜欢LINQ的强大功能。 我了解到有一种叫做JLINQ的JavaScript实现。 此外(如Catbert所言),Scala将具有LINQ 您知道LINQ或类似的东西是否将成为Java 7的一部分吗? 更新:2008年的有趣帖子-LINQ forJava工具 问题答案: 看一下Scala
问题内容: 我从来没有见过这样的声明,它是否存在于Java世界中? 问题答案: Java的版本是-它创建指定类型的新对象。 在Java中,内存是为您管理的,因此您不能显式或对象。
问题内容: 这听起来像一个愚蠢的问题,但是所有匿名类都必须在现有的类中定义和实例化。因此,它们必须同时是内部类。 问题答案: 这是真的。您的匿名类不能作为单独的类在其他类之外实现,因为它是匿名的,您甚至无法以任何方式引用它。 附加信息:从JLS:匿名类始终是一个内部类(第8.1.3节);该类通常是内部类。它永远不会是静态的(第8.1.1节,第8.5.1节)。