__slots__Python中的目的是什么- 特别是关于我何时想要使用它,何时不想使用它?
我在网上阅读随机主题时遇到了鸭子打字这个术语,并没有完全理解它.
什么是"鸭子打字"?
在Python中,"i"在.pyi扩展名中表示什么?
在PEP-484中,它提到.pyi是"存根文件",但没有关于扩展的助记符帮助.那么"我"的意思是"包括"吗?"实施"?"接口"?
我有许多类都共享相同的方法,只有不同的实现.在Java中,让每个类实现一个接口或扩展一个抽象类是有意义的.Python有没有类似的东西,或者我应该采取替代方法?
当我使用ABCMeta和abstractmethod时,我没有看到我的期望.
这在python3中工作正常:
from abc import ABCMeta, abstractmethod
class Super(metaclass=ABCMeta):
@abstractmethod
def method(self):
pass
a = Super()
TypeError: Can't instantiate abstract class Super ...
Run Code Online (Sandbox Code Playgroud)
而在2.6:
class Super():
__metaclass__ = ABCMeta
@abstractmethod
def method(self):
pass
a = Super()
TypeError: Can't instantiate abstract class Super ...
Run Code Online (Sandbox Code Playgroud)
除了ABCMeta之外,如果我从对象派生Super,它们也都可以正常工作(我得到了预期的异常).
如果我从列表中派生超级,他们都"失败"(没有例外).
我想要一个抽象基类作为列表但是抽象,并且在子类中具体.
我做错了,还是我不想在python中使用它?
我知道如何编写和使用简单的类,我甚至知道继承如何工作以及如何使用它.但是,关于如何实际设计类层次结构,甚至如何设计简单类的指南数量非常有限?另外,我何时以及为什么要继承(或使用)一个类?
所以我不是在问我怎么样,我在问何时以及为什么.示例代码总是一种很好的学习方式,所以我很感激它们.此外,强调设计的进展,而不是简单地给出一个句子的时间和原因.
我主要使用C++,C#和Python编程,但我可能会理解大多数语言中的简单示例.
如果任何条款似乎混淆了,请随时编辑我的问题.我不是本地人,我不确定所有的话.
我曾经习惯使用Java或C++编程,两者都有'接口'机制.在一些面向对象编程和设计模式的书中,经常提到界面.
Python中的接口有什么类似的东西吗?