Python:派生类中的构造函数不同迹象

3 投票
3 回答
5714 浏览
提问于 2025-04-16 12:26

在Python中,我怎样才能在一个派生类里有一个不同的构造函数呢?

如果我尝试这样做:

from abc import ABCMeta, abstractproperty, abstractmethod

class AbstractClass(object):
    __metaclass__ = ABCMeta

    def __init__(self):
        pass

然后

import AbstractClass

class DerivedClass(AbstractClass):

    _prop = ''
    def __init__(self, param):
        self._prop = param

我得到的结果是

TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)

我想做的事情是这样的

if (cl_param == '1'):
  obj = DerivedClass1('1', 'c')
else if (cl_param == '2'):
  obj = DerivedClass2('2', 'foo', 2)

等等。每个类的其他部分接口会类似,只是需要不同的初始化参数。或者我必须通过把参数放在一个列表里来解决这个问题吗?

3 个回答

3

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常会把它们转换成一种特定的格式,这样程序才能正确地使用它们。

比如说,如果你有一个用户输入的字符串,里面可能包含一些数字和字母。为了让程序能够对这些数据进行计算或者其他操作,我们可能需要把这个字符串转换成数字。这个过程就叫做“类型转换”。

类型转换有很多种方式,具体取决于你需要处理的数据类型和你想要的结果。常见的类型有整数、浮点数(小数)、字符串等。通过类型转换,我们可以确保数据在程序中能够被正确处理。

总之,理解数据的类型和如何进行转换是编程中非常重要的一部分,这样才能让我们的程序更智能、更高效。

class DerivedClass(AbstractClass):

    _props = ''
    def __init__(self, *params):
        self._props = params
        print params # (1,2,3,4)

c = DerivedClass(1,2,3,4)
8

确保你是从一个类继承,而不是从一个模块继承。

我在使用Django模型时也遇到了同样的错误信息。

错误在于我把我的模型从models.Model继承了。

我写的代码大概是这样的:

class Entry(models):
    content = models.TextField()
    pub_date = models.DateTimeField()

其实应该是这样的:

class Entry(models.Model):
    content = models.TextField()
    pub_date = models.DateTimeField()

注意缺少了models.Model

3

这是一个关于Python教程的链接,具体内容在第4.7.3节,讲的是“任意参数列表”。这部分主要介绍了如何在Python中处理不定数量的参数,也就是你可以传入任意数量的参数,而不需要事先定义好具体的数量。

撰写回答