类可以继承..
class Base:
def __init__(self,name):
self.name = name
class Derived1(Base):
def __init__(self,name):
super().__init__(name)
class Derived2(Base):
def __init__(self,name):
super().__init__(name)
Run Code Online (Sandbox Code Playgroud)
元类也可以做类似的事情吗?
我有一个要求,我的一些类必须既是抽象基类又是我自己的元类(比如单例类型..)
有没有可能做
class Singleton(type):
'''
implementation goes here..
'''
class AbstractSingleton(Singleton,ABCMeta):
'''
What code should go here??
'''
Run Code Online (Sandbox Code Playgroud)
如果可能的话,如何实现 AbstractSingleton 类?
我正在尝试在我的代码中使用 ipython 提供的 Traitlets 库。假设如果一个特征是特定类的实例,我如何观察该类成员的值的变化。
例子:
class A:
def init(self,val):
self.value = val
class myApp(HasTraits):
myA = Instance(A,kw={'val':2})
Run Code Online (Sandbox Code Playgroud)
如果对象 myA 的“value”成员变量发生更改,我希望调用一个观察方法。如下所示:
@observe('myA.value')
def onValueChange(self,change):
return
Run Code Online (Sandbox Code Playgroud)
Trailets 的实施是否可行?
我试图为我的项目和 StackOverflow 中的一个有趣的帖子实现单例类
我决定采用提到的元类方法。
现在..我尝试添加一个方法来获取和清除实例(以防用户想要摆脱当前实例并创建一个新实例..):
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
def getInstance(cls):
print("Class is {}".format(cls.__name__))
if not cls in cls._instances:
raise LookupError("No instance of the class {cls} create yet.".format(cls.__name__))
return cls._instances[cls]
def clearInstance(cls):
cls._instances.pop(cls, None)
class someClass(metaclass=Singleton):
def __init__(self,val):
self.value = val
Run Code Online (Sandbox Code Playgroud)
我能够成功创建对象..
In [9]: sc = someClass(1)
In [10]: sc.value
Out[10]: 1
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时dir(someClass),两种方法都没有显示:
class Singleton(type):
_instances = {} …Run Code Online (Sandbox Code Playgroud)