gpt4 book ai didi

初始化派生类和抽象类时出现python错误

转载 作者:太空狗 更新时间:2023-10-29 22:09:11 25 4
gpt4 key购买 nike

我有这个简单的代码,但出现了一个奇怪的错误:

from abc import ABCMeta, abstractmethod

class CVIterator(ABCMeta):

def __init__(self):

self.n = None # the value of n is obtained in the fit method
return


class KFold_new_version(CVIterator): # new version of KFold

def __init__(self, k):
assert k > 0, ValueError('cannot have k below 1')
self.k = k
return


cv = KFold_new_version(10)

In [4]: ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-ec56652b1fdc> in <module>()
----> 1 __pyfile = open('''/tmp/py13196IBS''');exec(compile(__pyfile.read(), '''/home/donbeo/Desktop/prova.py''', 'exec'));__pyfile.close()

/home/donbeo/Desktop/prova.py in <module>()
19
20
---> 21 cv = KFold_new_version(10)

TypeError: __new__() missing 2 required positional arguments: 'bases' and 'namespace'

我做错了什么?理论上的解释将不胜感激。

最佳答案

您错误地使用了 ABCMeta 元类。它是一个 类,而不是基类。照原样使用它。

对于 Python 2,这意味着将它分配给类的 __metaclass__ 属性:

class CVIterator(object):
__metaclass__ = ABCMeta

def __init__(self):
self.n = None # the value of n is obtained in the fit method

在 Python 3 中,您将在定义类时使用 metaclass=... 语法:

class CVIterator(metaclass=ABCMeta):
def __init__(self):
self.n = None # the value of n is obtained in the fit method

从 Python 3.4 开始,您可以使用 abc.ABC helper class作为基类:

from abc import ABC

class CVIterator(ABC):
def __init__(self):
self.n = None # the value of n is obtained in the fit method

关于初始化派生类和抽象类时出现python错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com