标签: abc

如何从超类方法调用python子类方法?

我有以下类型的超类/子类设置:

class SuperClass(object):
    def __init__(self):
        self.do_something() # requires the do_something method always be called

    def do_something(self):
        raise NotImplementedError

class SubClass(SuperClass):
    def __init__(self):
        super(SuperClass, self).__init__() # this should do_something 

    def do_something(self):
        print "hello"
Run Code Online (Sandbox Code Playgroud)

我希望SuperClass init始终调用一个尚未实现的do_something方法.我正在使用python 2.7.也许ABC可以做到这一点,但它有另一种方式吗?

谢谢.

python subclass init abc super

0
推荐指数
1
解决办法
2544
查看次数

什么时候应该从ABC继承?

我一直认为,abc.ABC当不希望实例化该类时,应该继承该实例。但是我刚刚意识到,如果一门课程只有一门课,@abstractmethod那么它也无法实例化它。

还有其他继承的理由ABC吗?

python abc

0
推荐指数
1
解决办法
123
查看次数

Python ABC 接口究竟是如何工作的?

我正在阅读 Luciano Ramalho 写的 Fluent Python 一书,我遇到了以下行:

请注意,内置的具体序列类型实际上并未将所描述的 Sequence 和 MutableSequence 抽象基类 (ABC) 子类化

所以我从 Python 文档中查看了 ABC,但我在理解它们的目的时遇到了问题。

例如,isinstance([], abc.Iterable), 返回True列表,也是如此abc.Sequenceabc.MutableSequence这是有道理的。对于isinstanceissubclass方法,以下内容也是如此。

issubclass(str, abc.MutableSequence) --> False
isinstance((), abc.MutableSequence)  --> False
Run Code Online (Sandbox Code Playgroud)

如果我执行以下操作:

class A:
    def __iter__(self):
        pass

a = A()
isinstance(a, abc.Iterable) # True
issubclass(A, abc.Iterable) # True
Run Code Online (Sandbox Code Playgroud)

但是 Aabc.Iterable在它的类定义中没有子类化(并且,我假设前面提到的其他类也没有,根据这本书)。这些issubclass / isinstance方法和 ABC 接口在这里是如何工作的?这些函数是否只是在类定义中查找 dunder 方法签名并将它们与上述 ABC 类中的 dunder 签名匹配?

除了提供一种验证类是否包含某些特定的 dunder 方法之外,我看不到 ABC 类的任何目的,因此了解更多有关整个过程的目的会很好。

任何形式的帮助将不胜感激。谢谢。

python inheritance abc python-3.x

0
推荐指数
1
解决办法
35
查看次数

为什么 super() 调用可以在派生自 ABC 的 Python 类中工作?

我有一个带有具体方法的 Python ABC(我们称之为A__init__(),以及一个实现这个 ABC 的类(我们称之为B)。据我了解,我应该能够实例化 ABC。

问题:类函数super().__init__()内部的调用为什么以及如何工作?我假设创建了父类的一个实例 - 在本例中是 ABC。__init__Bsuper()

A级

from abc import ABC, abstractmethod
from util.fileManager import FileManager


class A(ABC):
    def __init__(self):
        self.file_manager = FileManager()  # Composition object

    ...
Run Code Online (Sandbox Code Playgroud)

B类,实现A类

from interfaces.A import A


class B(A):
    def __init__(self):
        super().__init__()

    ...
Run Code Online (Sandbox Code Playgroud)

编辑/解决方案

Python 中的“super”有什么作用?- super().__init__() 和显式超类 __init__() 之间的区别

正如你们许多人可能已经看到的那样,这个问题实际上可以归结为super()Python 中的作用。接受我标记的答案,我真的想指出@KarlKnechtel评论中的链接,因为它帮助我进一步了解情况。

python abc super python-3.x

0
推荐指数
1
解决办法
365
查看次数

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

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

from abc import ABCMeta, abstractmethod

class Polygon:

__metaclass__ = ABCMeta

@abstractmethod
def compute_area(self): pass


def __init__(self):
    self.width = None
    self.height = None

@property
def width_prop(self):
    return self.width

@property
def height_prop(self):
    return self.height

@width_setter.setter
def width_setter(self, width):
    self.width = width

@height_setter.setter
def height_setter(self, height):
    self.height = height



class Triangle(Polygon):
    def compute_area(self):
        return 0.5 * width * height




if __name__ == "__main__":
    tri = Triangle()
    tri.height_setter(20)
    tri.width_setter(30)
    print "Area of the triangle = …
Run Code Online (Sandbox Code Playgroud)

python properties abc

-1
推荐指数
2
解决办法
1252
查看次数

标签 统计

abc ×5

python ×5

python-3.x ×2

super ×2

inheritance ×1

init ×1

properties ×1

subclass ×1