我希望用Python构建类接口,但发现Python缺少接口构造。你知道吗
我需要的是,如果程序员试图在一个类中添加新属性,而没有在另一个类中添加具有相同名称的属性,则会引发一个异常(在编译时或运行时)
举个例子: 你知道吗
class MongoCompany:
company_name = MongoField()
class ESCompany:
company_name = ESField()
如果程序员试图向MongoCompany
添加字段而不更改ESCompany
,则会引发异常。你知道吗
class MongoCompany:
company_name = MongoField()
company_phone = MongoField()
class ESCompany:
company_name = ESField()
MongoCompany.init()
编辑:
背景
这是为了防止程序员修改MongoDB用Mongoengine的Document
类声明的模式,而不添加对Elasticsearch dsl的DocType
类在另一个文件中声明的Elasticsearch模式的相应修改。你知道吗
耶!一个元类的实际应用程序,它不是为了使用元类而设计的!我们可以编写一个元类,如果类定义中出现意外属性,它将抛出。我们所要做的就是确保你的程序员真正使用它。你知道吗
Here's快速演示
请注意,我们甚至没有进行实例化:我们的检查在定义类本身时运行。你知道吗
编辑:在我的编辑中,我引用了一个函数
is_dunder
。这可以像name.startswith('__')
或regex或任何你想要的一样简单,只要它去掉python而不是程序员在类上设置的属性。你知道吗编辑2:只是为了好玩,这里有两个更“优雅”(虽然不太具体)的支票实现:
或者简单地说:
相关问题 更多 >
编程相关推荐