繁体   English   中英

调用super()时必须为非实例错误类型

[英]Must be type not instance error when calling super()

我的问题是,当我调用isSearchQueryValid()并导致super()时,出现此错误:

must be type, not instance

我已经发现它与旧/新类样式有关,但是当我将抽象方法,工厂和单例结合在一起时,我会感到有些困惑,并且不知道什么了。 你能指出我的错误吗?

from abc import ABCMeta, abstractmethod, abstractproperty
from Singleton import *

class TorrentSiteFactory():    
    @staticmethod
    def Create(site):
        if site == "MySite": return MySite.GetInstance()

class Site(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def getSearchQueryLink(self): pass

    @abstractmethod
    def isSearchQueryValid(self, searchQuery, categories = None):
        '''Returns True if SearchQuery is ok, False when there are some errors. Additionally returns list of errors and warnings'''

        return True

@Singleton
class MySite(Site):
    def getList(self, searchQuery):
        searchLink = self.getSearchQueryLink(searchQuery)

    def getSearchQueryLink(self, searchQuery):
        searchQueryIsCorrect = self.isSearchQueryValid(searchQuery, self.Categories)
        if searchQueryIsCorrect: return "www.somelink.com"
        return None

    def isSearchQueryValid(self, searchQuery, categories):
        return super(MySite, self).isSearchQueryValid(searchQuery, categories) 

这是单例:

class Singleton():
    def __init__(self, decorated):
        self._decorated = decorated

    def GetInstance(self):
        try:
            return self._instance
        except AttributeError:
            self._instance = self._decorated()
            return self._instance

    def __call__(self):
        raise TypeError('Singletons must be accessed through `Instance()`.')

    def __instancecheck__(self, inst):
        return isinstance(inst, self._decorated)

您的Singleton实现非常糟糕。 当你做

@Singleton
class MySite(Site):
    ...

MySite不是您定义的类。 这是Singleton的一个实例。 它没有MySite任何方法,并且super(MySite, self)找不到要查找的MRO。 如果没有完全重写,则必须对Singleton很大的更改。

另外, SingletonTorrentSiteFactory是经典类,因为您忘记了从object继承。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM