Python:派生类中的构造函数不同迹象
在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中处理不定数量的参数,也就是你可以传入任意数量的参数,而不需要事先定义好具体的数量。