小编Aru*_*ran的帖子

python元类可以继承吗?

类可以继承..

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 类?

metaclass python-3.x

4
推荐指数
1
解决办法
1407
查看次数

如何使用traitlets库观察实例成员变量?

我正在尝试在我的代码中使用 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 的实施是否可行?

traits ipython python-3.x

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

元类可以有方法吗?

我试图为我的项目和 StackOverflow 中的一个有趣的帖子实现单例类

在 Python 中创建单例

我决定采用提到的元类方法。

现在..我尝试添加一个方法来获取和清除实例(以防用户想要摆脱当前实例并创建一个新实例..):

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)

python methods metaclass python-3.x

2
推荐指数
2
解决办法
1728
查看次数

标签 统计

python-3.x ×3

metaclass ×2

ipython ×1

methods ×1

python ×1

traits ×1