社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python如何向子类添加初始化参数

Rosey • 5 年前 • 1764 次点击  

我有一个子类共享它的基类的init:

class SubClass(BaseClass)
    def __init__(self, param, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.thing = param

我遇到的问题是子类init参数param被传递到 super().__init__(*args, **kwargs) 作为额外参数。这通常会给我一个错误,比如:

TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given

我不想那样。我只希望“param”用于这些子类实例。如何停止向基类in it发送额外的参数,同时仍然能够在子类init中使用它?再现问题的示例代码:

from unittest import TestCase


class TestCaseSubClass(TestCase):

    def __init__(self, param, *args, **kwargs):
        super().__init__(*args, **kwargs)  # Just use whatever is in TestCase's init + our stuff
        self.thing = param
        print(self.thing)


class TestClass(TestCaseSubClass(param='bdfbdfb')):

        def test_stuff(self):
            print('test stuff here')

或者只使用原始的python,没有导入,为什么我不能这样做?(相同的错误)

class A(object):
    def __init__(self, athing='thing'):
        self.thing = athing
        print(self.thing)

class AB(A):
    def __init__(self, param, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.param= param
        print(self.param)


class ABC(AB(param='thh')):
    pass

ABCinstance = ABC()
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43900
 
1764 次点击  
文章 [ 1 ]  |  最新文章 5 年前