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()对于管理模型参数、注册子模块和启用核心功能(如参数迁移)至关重要
浙公网安备 33010602011771号