python 缺少对超类__inti__调用
时间: 2023-11-22 20:46:43 浏览: 455
Python中的类可以继承自其他类,被继承的类称为超类或父类,继承的类称为子类。在子类中,如果需要对超类的__init__方法进行扩展,需要使用super()函数来调用超类的__init__方法。如果在子类中没有调用超类的__init__方法,就会出现“Python缺少对超类__init__调用”的错误。这是因为子类继承了超类的属性和方法,但是没有初始化超类的属性,导致程序出错。在上面的代码中,Teacher类继承了People类,但是在__init__方法中没有调用super()函数来初始化People类的属性,因此会出现上述错误。
相关问题
实现int Delete_Linked_Node(Linked_Node*L,inti)方法,删除单链 表L的第i个数据元素(i为逻辑位置),并返回删除操作是否成功 (返回O 表示成功,返回-1表示不成功)
实现`Delete_Linked_Node`方法是一个常见的链表操作,目的是从给定的单链表`L`中删除第`i`个节点。这里,`L`是一个指向头结点的指针,`int i`表示需要删除的节点的逻辑位置,通常从0开始计数。这个方法的步骤大致如下:
1. 首先检查链表是否为空,或者`i`小于0,如果这样就直接返回-1,因为不能删除无效的位置。
2. 如果链表只有一个节点并且要删除的就是它,将链表置空并返回-1,因为单独的一个节点无法移除其自身。
3. 使用两个指针,`current`用于遍历,初始化为`L`;`prev`作为前一个节点,初始为`NULL`。当`current`不是要删除的节点时,`prev`移动到`current`,`current`向前移动一位。
4. 当`current`到达第`i+1`个节点时(因为`i`是从0开始的),我们知道`current`就是需要删除的节点。此时,如果`prev`存在,将`prev`的`next`指向`current->next`;否则,说明`head`就是需要删除的节点,更新`head`为`current->next`。
5. 回调函数中,如果能成功找到并删除节点,返回0表示成功;如果没有找到,说明插入位置错误,返回-1。
下面是该方法的基本伪代码形式:
```c++
int Delete_Linked_Node(Linked_Node* L, int i) {
if (!L || i < 0)
return -1;
Linked_Node *prev = NULL;
Linked_Node *current = L;
for (int j = 0; j < i + 1 && current != NULL; j++, current = current->next)
prev = current;
if (prev == NULL)
return -1;
else
{
prev->next = current->next;
delete current; // 根据实际情况释放内存
return 0;
}
}
```
代码为:class LogisticRegression(nn.Module): def __inti__(self,n_input_features): super(LogisticRegression,self).__inti() self.linea=nn.Linear(n_input_features,1) def forward(self,x): y_predicted=torch.sigmoid(self.linea(x)) return y_predicted model=LogisticRegression(n_feature)
这段代码定义了一个 LogisticRegression 类,继承了 nn.Module。构造函数 __init__() 中传入了输入特征的数量 n_input_features,然后调用了父类的构造函数,并定义了一个线性层 self.linea,其输入特征数量为 n_input_features,输出特征数量为 1。
forward() 方法定义了模型的前向传播过程。输入 x 经过线性层 self.linea 后,再经过 sigmoid 函数得到 y_predicted,即预测值。
最后,利用该类构造一个模型对象 model,传入特征数量 n_feature。
阅读全文