相关疑难解决方法(0)

如何在python抽象类中创建抽象属性

在下面的代码中,我创建了一个基本抽象类Base.我希望所有继承的类都Base提供name属性,所以我创建了这个属性@abstractmethod.

然后我创建了一个Base名为的子类Base_1,它旨在提供一些功能,但仍然是抽象的.没有name属性Base_1,但是python会在没有错误的情况下实现该类的对象.如何创建抽象属性?

from abc import ABCMeta, abstractmethod
class Base(object):
    __metaclass__ = ABCMeta
    def __init__(self, strDirConfig):
        self.strDirConfig = strDirConfig

    @abstractmethod
    def _doStuff(self, signals):
        pass

    @property    
    @abstractmethod
    def name(self):
        #this property will be supplied by the inheriting classes
        #individually
        pass


class Base_1(Base):
    __metaclass__ = ABCMeta
    # this class does not provide the name property, should raise an error
    def __init__(self, strDirConfig):
        super(Base_1, self).__init__(strDirConfig)

    def _doStuff(self, signals): …
Run Code Online (Sandbox Code Playgroud)

python abstract-class properties decorator

81
推荐指数
6
解决办法
5万
查看次数

Python 2.7结合abc.abstractmethod和classmethod

如何在Python 2.7中为抽象类方法创建装饰器?

是的,这与这个问题类似,除了我想要结合abc.abstractmethodclassmethod不是staticmethod.此外,它看起来像是在Python 3abc.abstractclassmethod添加的(我认为?),但我使用的是Google App Engine,因此我目前仅限于Python 2.7

提前致谢.

python google-app-engine python-2.7

26
推荐指数
3
解决办法
1万
查看次数

在Python中,如何强制抽象方法在子类上是静态的?

这是我想要的设置:A应该是一个带有静态和抽象方法f()的抽象基类.B应该从A继承.要求:1.您不应该实例化A 2.您不应该实例化B,除非它实现了静态f()

这个问题中汲取灵感,我尝试了几种方法.有了这些定义:

class abstractstatic(staticmethod):
    __slots__ = ()
    def __init__(self, function):
        super(abstractstatic, self).__init__(function)
        function.__isabstractmethod__ = True
    __isabstractmethod__ = True

class A:
    __metaclass__ = abc.ABCMeta
    @abstractstatic
    def f():
        pass

class B(A):
    def f(self):
        print 'f'

class A2:
    __metaclass__ = abc.ABCMeta
    @staticmethod
    @abc.abstractmethod
    def f():
        pass

class B2(A2):
    def f(self):
        print 'f'
Run Code Online (Sandbox Code Playgroud)

这里使用通常的Python约定定义A2和B2,并使用答案中建议的方式定义A和B. 以下是我尝试的一些操作以及不希望的结果.

A/B班:

>>> B().f()
f
#This should have thrown, since B doesn't implement a static f()
Run Code Online (Sandbox Code Playgroud)

A2/B2类:

>>> A2()
<__main__.A2 object at 0x105beea90>
#This should …
Run Code Online (Sandbox Code Playgroud)

python abstract-class static-methods abc

3
推荐指数
1
解决办法
1767
查看次数