序言:我有对象,其中一些可以由默认构造函数创建,并且无需修改,因此可以将这些对象视为“空”。有时我需要验证某个对象是否为“空”。可以通过以下方式完成(majik 方法在基类中实现Animal
):
>>> a = Bird()
>>> b = Bird()
>>> a == b
True
>>> a == Bird()
True
所以问题是:是否有可能(如果是,那么如何)实现这样的语法:
>>> a == Bird.default
True
至少这个(但前一个更甜):
>>> a == a.default
True
但是:default
在基类中实现Animal
(不要在所有派生类中重复):
class Animal(object):
... tech stuff ...
- obj comparison
- obj representation
- etc
class Bird(Animal):
... all about birds ...
class Fish(Animal):
... all about fishes ...
当然,我不需要解决方案来Bird()
上课Animal
:)
我想在基类中实现一种模板,它将删除派生类默认实例并将其唯一副本存储在派生类或实例属性中。我认为这可以通过使用元类来实现,但不知道如何。
类默认实例可以被视为__init__()
由其类实例化的任何对象(当然无需进一步的对象修改)。
更新
系统充满了对象,我只想有可能将新创建的(默认情况下)创建的对象(例如无用的显示)与已经以某种方式修改过的对象分开。我这样做:
if a == Bird():
. . .
我不想创建新对象进行比较,直观地说,我希望将一个实例副本作为标准具,以便与此类的实例进行比较。对象类似于 JSON,并且只包含属性(除了隐式、、、__str__
方法) __call__
,__eq__
所以我想保持这种使用内置 Python 功能的风格,并避免使用显式定义的方法is_empty()
,例如。这就像在交互式 shell 中输入一个对象并在调用时将其打印出来__str__
,它是隐含的,但很有趣。