[英]Multiple Mixins and properties
我試圖創建一個具有它自己的特性的混合類,但作為類沒有初始化初始化屬性背后的“隱性”的變量。
class Software:
__metaclass__ = ABCMeta
@property
def volumes(self):
return self._volumes
@volumes.setter
def volumes(self, value):
pass
class Base(object):
def __init__(self):
self._volumes = None
class SoftwareUser(Base, Software):
def __init__(self):
super(Base, self).__init__()
因此,以上是我想出的最佳解決方案,但實際情況是_volumes並不真正屬於基礎。 我可以在軟件類中添加一個init,但是超級調用不能同時在兩個mixins上使用。
第二個是我需要依賴於傳入調用的多個mixins,它們將始終需要基數,但是mixins會發生變化,因此我真的不希望來自未在該調用中混合的mixin中的變量。
如果有可能我可以讓mixin將其變量添加到類中,或者可以動態地調用mixin類的init的方法嗎?
有任何問題讓我知道。
謝謝
是的,這太過復雜了。 一個類(包括mixins)僅應負責在MRO中調用下一個實現,而不應將所有這些都編組。 嘗試:
class Software:
@property
def volumes(self):
return self._volumes
@volumes.setter
def volumes(self, value):
pass
def __init__(self):
self._volumes = None
super().__init__() # mixin calls super too
class Base(object):
def __init__(self):
other_vars = None
class SoftwareUser(Software, Base): # note order
def __init__(self):
super().__init__() # all you need here
好的,所以這是我想出的,如果我對復雜情況做了這樣的介紹,則可以接受其他答案。
class Software:
@property
def volumes(self):
return self._volumes
@volumes.setter
def volumes(self, value):
pass
def __init__(self):
self._volumes = None
class Base(object):
def __init__(self):
other_vars = None
class SoftwareUser(Base, Software):
def _bases_init(self, *args, **kwargs):
for base in type(self).__bases__:
base.__init__(self, *args, **kwargs)
def __init__(self, *args, **kwargs):
self._bases_init(*args, **kwargs)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.