在Python中,是否可以创建一个类来复制某个类的功能,但对其进行更改';什么是基类?
原始类结构如下所示:在Python中,是否可以创建一个类来复制某个类的功能,但对其进行更改';什么是基类?,python,Python,原始类结构如下所示: class PyLibMCCache(BaseMemcachedCache): class BaseMemcachedCache(BaseCache): PyLibMCTagsCache = type("PyLibMCTagsCache", (BaseTagsMemcachedCache,), vars(PyLibMCCache)) 我创建了一个具有附加功能的类,名为bas
class PyLibMCCache(BaseMemcachedCache):
class BaseMemcachedCache(BaseCache):
PyLibMCTagsCache = type("PyLibMCTagsCache",
(BaseTagsMemcachedCache,),
vars(PyLibMCCache))
我创建了一个具有附加功能的类,名为basetagsmecachedcache
,它源自BaseMemcachedCache
,如下所示:
class BaseTagsMemcachedCache(BaseMemcachedCache):
是否可以创建与pylibmcache
相同的新类(例如,使用相同的方法和属性),但将basetagsmecachedcache
作为其基类?我使用Mixin(BaseTagsCacheMixin
)作为解决方案,但我认为可能有更好的解决方案。你在说什么?是的,您可以定义:
class NewBaseTagsMemcachedCache(BaseTagsMemcachedCache, PyLibMCCache):
请记住,从左到右的规则适用于Python。您在说什么?是的,您可以定义:
class NewBaseTagsMemcachedCache(BaseTagsMemcachedCache, PyLibMCCache):
请记住,从左到右的规则适用于Python。Python类可以具有多重继承。这对你有用吗 Python类可以具有多重继承。这对你有用吗 您可以创建具有相同属性但不同基类的新类型,如下所示:
class PyLibMCCache(BaseMemcachedCache):
class BaseMemcachedCache(BaseCache):
PyLibMCTagsCache = type("PyLibMCTagsCache",
(BaseTagsMemcachedCache,),
vars(PyLibMCCache))
不过,这对我来说似乎有点复杂。我可能会选择更直接的设计。您可以创建具有相同属性但不同基类的新类型,如下所示:
class PyLibMCCache(BaseMemcachedCache):
class BaseMemcachedCache(BaseCache):
PyLibMCTagsCache = type("PyLibMCTagsCache",
(BaseTagsMemcachedCache,),
vars(PyLibMCCache))
不过,这对我来说似乎有点复杂。我可能会选择更直截了当的设计。我现在正在使用它,这就是我对Mixin()的意思。无论如何,谢谢你,我认为你已经用正确的方式做了。您是否正在寻找一个替代方案来解决您现在遇到的一些问题?我要添加功能的所有类(
MemcachedCache
,pylibmcache
)都派生自BaseMemcachedCache
)。我无法轻松更改Mixin类中的\uuuuu init\uuuu
,因为这些类接受不同数量的参数,因此我正在寻找一种更改基本类的解决方案如果父类具有不兼容的初始值设定项,我认为更改mixin类的\uuuu init\uuuu
正是您想要做的:它必须显式地调用父类的init,所以只需正确地调用它们。但是检查“抽象基类”是否做了您感兴趣的事情。我现在正在使用它,这就是我对mixin()的意思不管怎样,谢谢。我想你已经做对了。您是否正在寻找一个替代方案来解决您现在遇到的一些问题?我要添加功能的所有类(MemcachedCache
,pylibmcache
)都派生自BaseMemcachedCache
)。我无法轻松更改Mixin类中的\uuuuu init\uuuu
,因为这些类接受不同数量的参数,因此我正在寻找一种更改基本类的解决方案如果父类具有不兼容的初始值设定项,我认为更改mixin类的\uuuu init\uuuu
正是您想要做的:它必须显式地调用父类的inits,所以只需正确地调用它们。但是请检查“抽象基类”是否做了您感兴趣的事情。@NiklasB。你认为我提供的链接是为了什么?@NiklasB。你认为我提供的链接是为了什么?