目录
Q1:super(NetworkBlock, self).__init__()什么意思
Q2:__call__() 类的实例圆括号自动调用
Q3:__getitem__() 类的实例 方括号自动调用
Q4:没有双下划线方法时,普通的调用类的方法
总结
Q1:super(NetworkBlock, self).__init__()什么意思
class NetworkBlock(nn.Module):# 定义网络块,由多个BasicBlock组成def __init__(self, nb_layers, in_planes, out_planes, block, stride, dropRate=0.0):# 初始化网络块super(NetworkBlock, self).__init__()
- (父类是谁)`NetworkBlock`类的父类是`nn.Module`
- (类的继承)`NetworkBlock`类是通过继承`nn.Module`类而创建的。
- (调用父类的构造函数,初始化父类的实例)通过调用`super(NetworkBlock, self).__init__()`,实际上是在调用`nn.Module`类的构造函数,以确保在创建`NetworkBlock`对象时正确地初始化`nn.Module`类的相关属性和方法。
- (调用父类的构造函数,初始化父类的实例)`super(NetworkBlock, self).__init__()`这行代码的意思是调用父类(或者超类)的`__init__`方法,它是用来初始化父类的实例。
- 构造函数和初始化函数是一个东西
类的继承
调用父类的构造函数,并初始化父类的实例
Q2:__call__() 类的实例圆括号自动调用
class Greeter:def __init__(self, name):self.name = namedef __call__(self):print(f"Hello, {self.name}!")# 创建一个Greeter类的实例
greeter = Greeter("Alice")# 调用实例,实际上会调用__call__()方法
greeter()
Q3:__getitem__() 类的实例 方括号自动调用
class CustomList:def __init__(self):self.items = []def __getitem__(self, index):return self.items[index]def __len__(self):return len(self.items)def add_item(self, item):self.items.append(item)# 创建一个CustomList类的实例
my_list = CustomList()# 添加一些元素到列表中
my_list.add_item("Apple")
my_list.add_item("Banana")
my_list.add_item("Orange")# 使用[]索引操作访问元素,实际上会调用__getitem__()方法
print(my_list[1]) # 输出:Banana
Q4:没有双下划线方法时,普通的调用类的方法
传参数看init
调用方法加.(点)
class Person:def __init__(self, name):self.name = namedef greet(self):print(f"Hello, my name is {self.name}!")# 创建一个Person类的实例
person = Person("Alice")# 调用实例的方法来实现类似调用的效果
person.greet()
总结
类的实例叫对象
类的实例初始化时,需要传的参数,要看init
对象 = 类(......) ....需要看init需要什么
对象调用类的方法
__call__()方法:对象()
__getitem__()方法:对象[]
对象使用类的普通方法:
对象.啥啥啥 啥啥啥是类定义的
双下划线:魔术方法,严格的私有方法
单下划线:不严格的私有方法