问题标签 [abc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1741 浏览

python - 无法使用 python 中的 abc 模块和属性访问成员变量

我写了一个代码来模拟abc模块和properties. 但是,似乎我无法访问widthheight变量。代码如下:

我得到的错误信息是NameError: name 'width_setter' is not defined. 我的实施可能有什么问题?

编辑:

0 投票
2 回答
1297 浏览

python - 这个具有“更好” __repr__() 的抽象基类是否危险?

让我感到__repr__()困扰的是,一个类的默认值是如此无信息:

...所以我一直在考虑如何改进它。经过一番考虑,我想出了这个利用pickle协议__getnewargs__()方法的抽象基类:

这是其用法的一个简单示例:

...以及由此产生的repr()行为:

现在,我可以看到 Python 在默认情况下不立即执行此操作的一个原因 - 要求每个类定义一个__getnewargs__()方法比期望(但不要求)它定义一个__repr__()方法更加繁琐。

我想知道的是:它有多危险和/或脆弱?副手,我想不出任何可能出错的地方,除非一个Repro实例包含自己,你会得到无限递归......但这是可以解决的,代价是使上面的代码更丑陋。

我还错过了什么?

0 投票
3 回答
204 浏览

python - 使用隐式类型转换实现逐点算术

假设我有 class Function,其实例是带有一个参数的可调用对象。我以直接的方式为这些类定义了逐点算术。这是我的代码的简化版本(我实际上有更复杂的行为,__init____call__与这个问题无关):

当我尝试允许隐式类型转换时,我被卡住了。例如,我希望能够编写:

换句话说,每当我在实例v旁边的算术表达式中看到一个数字对象时Function,我都想转换vFunction(lambda x : v).

此外,我想为我的一些用户定义类型实现类似的行为(同样,每当我在具有Function对象的相同二进制算术表达式中看到它们时)。

虽然我当然可以用强力分类的常规和反射二进制算术运算符(每个检查isinstance(v, numbers.Number)和)来编写这个逻辑isinstance(v, MyUserDefinedType),但我觉得可能有一种更优雅的方式。

另外,如果我的设计还有其他可能的改进,请告诉我。(Function对象很少被创建,但经常被调用,所以性能是有一定意义的。)

编辑:

为了解决@Eric 的评论,我应该澄清我有另一个用户定义的类Functional

当我在同一个算术表达式中同时看到 aFunction和一个实例时,我想隐式转换为using方法。FunctionalFunctionFunctionalFunctional.from_function

因此,隐式类型转换层次结构如下:

  • 功能性
  • 功能
  • 还要别的吗

而且我想隐式转换为在给定算术表达式中看到的这个层次结构中的最高类型。

0 投票
1 回答
625 浏览

python - Python 继承、元类和 type() 函数

我不明白为什么以下代码会以特定方式运行,如下所述:

为什么repr(MyClass2)abc.MyClass2(这是不正确的)?谢谢!

0 投票
3 回答
12546 浏览

python - 确定 Python 类是抽象基类还是具体类

我的 Python 应用程序包含许多抽象类和实现。例如:

FriendlyMessagePrinter是我们可以使用的具体类...

...但是MessageDisplayandFriendlyMessageDisplay是抽象类,尝试实例化一个会导致错误:

如何检查给定的类对象是否是(不可实例化的)抽象类?

0 投票
1 回答
1660 浏览

python - 使用@abstractproperty 和@abstractmethod 实现/覆盖的实际差异

考虑一个带有函数的抽象基类,您希望每个后续子类都覆盖该函数。使用 abc 模块和 ABCMeta;是否使用@abstractproperty@abstractmethod实际上强制子类/开发人员实现创建装饰器指定的函数类型?从我的实验中,您可以使用子类中的方法覆盖抽象属性和使用属性的抽象方法。

这个概念不正确吗?

0 投票
1 回答
3644 浏览

python - abc.abstractmethod + 属性

根据文档,它应该可以结合起来@property@abc.abstractmethod因此以下内容应该在 python3.3 中工作:

测试实现:

所以它显然不是一个属性,因为它应该像这样工作:

也许我太笨了,或者它根本不起作用,有人有想法吗?

0 投票
1 回答
1235 浏览

python - python抽象基类的惯用多重继承

简单来说,我想要的是tuple一个或两个额外的方法。__new__或者__init__不会被修改。

我想创建一个抽象基类,它是collections.abc.Sequence. 然后我想将它用于基本上是一个tuple子类。类图类似于:

原因:

  • MyABC定义了一些自定义接口。它在那里,所以第三方不会被迫子类化MyClass
  • tuple需要它的性能和已经实现的方法。

问题:

  • 惯用的方式只是写class MyClass(MyABC, tuple)还是我应该玩寄存器?
  • 我还有其他明显的问题吗?
  • 是否会因为子类化而失去空间和性能优势tuple
0 投票
2 回答
1149 浏览

python - 从父文件访问子类变量

我正在寻找一种从在不同文件中实例化的父类访问子类变量的方法。例如

基本文件.py:

实现文件.py:

当我运行时:

我得到 0。我想得到 10

当父类和实现类都在同一个文件中时,这显然不是问题,但我有一个项目结构,要求它们不是:

我认为该abc模块可能会有所帮助,但到目前为止我的实验证明是徒劳的。

0 投票
1 回答
3056 浏览

python - 带有字符串和第二类的 __new__ 和 __init__ 的 Python 多重继承

我正在尝试创建一个继承自一个str类型和第二个类的派生类。这是有问题的,因为str类型不只是调用__init__,而是__new__由于其不变性而导致的方法。我知道 for__init__和 super 要正常工作,您需要一直使用相同的调用结构。但是,以下实现失败:

这里foo('cat')适用于:

但有一个论点foo('cat', x=3),它失败了:

可以通过将base.__new__方法更改为:

但现在我改变了调用结构,我觉得这会在以后给我带来问题。

如何正确地从字符串和第二类继承