class A:
def __init__(self):
print("world")
class B(A):
def __init__(self):
print("hello")
B() # output: hello
Run Code Online (Sandbox Code Playgroud)
在我使用超级构造函数的所有其他语言中隐式调用.如何在Python中调用它?我希望,super(self)但这不起作用.
在下面的代码中,我创建了一个基本抽象类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中使用抽象属性实现以下Scala代码的最短/最优雅的方法是什么?
abstract class Controller {
val path: String
}
Run Code Online (Sandbox Code Playgroud)
Controller强制使用子类来定义Scala编译器的"路径".子类看起来像这样:
class MyController extends Controller {
override val path = "/home"
}
Run Code Online (Sandbox Code Playgroud) 我试图A用一个默认行为的构造函数声明一个抽象类:所有子类必须初始化一个成员self.n:
from abc import ABCMeta
class A(object):
__metaclass__ = ABCMeta
def __init__(self, n):
self.n = n
Run Code Online (Sandbox Code Playgroud)
但是,我不想让A类被实例化,因为它是一个抽象类.问题是,这实际上是允许的:
a = A(3)
Run Code Online (Sandbox Code Playgroud)
当我期望它应该时,这不会产生任何错误.
那么:如何在为构造函数定义默认行为时定义不可实例化的抽象类?
python ×4
oop ×2
class ×1
constructor ×1
decorator ×1
inheritance ×1
properties ×1
python-2.7 ×1
scala ×1
superclass ×1