moanna

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、基本用法‌:
1)super()是一个内置函数,用于返回一个代理对象,该对象将方法调用委托给父类或兄弟类。在子类中调用父类的初始化方法时,通常使用super().init()。
2)语法为super(子类, self).init()。在Python 3中,可以直接使用super().init(),无需指定子类名;在Python 2中则需要明确指定子类名,如super(ChildClass, self).init()‌

‌2、参数详解‌:

‌1)子类‌:第一个参数是子类本身,表示当前正在定义的类。
2)self‌:第二个参数是类的实例,通常是self。这个参数指定了当前对象的引用。
3)init()‌:这是要调用的父类方法,通常是构造器或初始化方法。通过这种方式,可以确保父类的初始化代码被执行,从而正确初始化父类的状态和属性‌

以下是第一个基本示例,展示了如何在子类的构造方法中使用 super().init():

import unittest
from self_study.class_practice0601.http_request import HttpRequest
from self_study.class_practice0601.get_data import GetData

class TestHttp(unittest.TestCase):
    def setUp(self):
        pass
    def __init__(self,methodName,url,data,expected,method):
        super(TestHttp,self).__init__(methodName)#这样父类的方法就保留了
        self.url=url
        self.data=data
        self.expected=expected
    def test_api(self):
            res=HttpRequest().http_request(self.url,self.data,'post')
            # print("响应体中的token值:",res.json()['data']['token'])
            if 'data' in res.json() and 'token' in res.json()['data']:
                setattr(GetData,'Token',res.json()['data']['token'])
            if 'data' in res.json() and 'uuid' in res.json()['data']: #如果有值则为真,否则为假
                setattr(GetData,'Uuid',res.json()['data']['uuid'])
                # 反射用法:setattr(类名,属性名,所取值)--设置属性值
                #         getattr(类名,属性名)--获取属性值

            try:
                self.assertEqual(self.expected,res.json()['ret'])
            except AssertionError as e:
                print("test_api's error is{}".format(e))
                raise e
            print("test_api正常登录的结果是:", res.json())

执行suite文件:

suite=unittest.TestSuite()
from self_study.class_practice0601.test_data_canshuhua import TestHttp
for item in test_data:
    suite.addTest(TestHttp("test_api",item['url'],item['data'],item['expected'],item['mothod']))
with open('excel_report_huiyuan.html','wb') as file:
    runner=HTMLTestRunnerNew.HTMLTestRunner(stream=file,
                                            verbosity=2,
                                            title="这是0530测试报告",
                                            description=None,
                                            tester=None)
    runner.run(suite)

以下是第二个基本示例,展示了如何在子类的构造方法中使用 super().init():

class Parent:
def __init__(self, name):
self.name = name
 
class Child(Parent):
def __init__(self, name, age):
super().__init__(name) # 调用父类的构造方法以初始化 name
self.age = age #添加自定义age属性
 
child = Child("Alice", 25)
print(child.name) # 输出 "Alice"
print(child.age) # 输出 25

  在上面的示例中,子类 Child 的构造方法首先调用了父类 Parent 的构造方法,以确保 name 属性被正确初始化,然后再添加了 age 属性,这样就同时包括了父类和子类的属性。

‌3、使用场景和重要性‌:

‌1)确保父类初始化‌:在面向对象编程中,子类需要确保父类被正确初始化。如果不调用父类的初始化方法,继承链可能会断开,导致子类无法完全继承父类的功能。特别是在构建复杂对象或系统时,正确初始化父类是非常重要的‌

‌2)多继承中的优势‌:在多继承的情况下,super()可以根据方法解析顺序(MRO)调用正确的父类方法,避免了硬编码父类名称带来的维护问题‌
‌3)参数管理和功能支持‌:在 PyTorch 中,调用super().init()对于管理模型参数、注册子模块和启用核心功能(如参数迁移)至关重要‌

posted on 2025-06-01 16:26  木兰花88  阅读(179)  评论(0)    收藏  举报