python-3.x - 使用继承时 __init__() 中的参数数量问题
问题描述
我是一个尝试使用 Python 执行继承的初学者。因此,我决定练习 Michael T. Goodrich 所著的“Python 中的数据结构和算法”一书中的示例程序。
这是代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class Progression:
def __init__(self,start=0):
self._current = start
def _advanced(self):
self._current += 1
def __next__(self):
if self._current is None:
raise StopIteration()
else:
answer = self._current
self._advanced()
return answer
def __iter__(self):
return self
def print_progression(self,n):
print(' '.join(str(next(self)) for j in range(n)))
class ArithmeticProgression:
def __init__(self,increment=1,start=0):
super().__init__(start)
self._increment = increment
def _advance(self):
self._current += self._increment
class GeometricProgression(Progression):
def __init__(self,base=2,start=1):
super().__init__(start)
self._base = base
def _advance(self):
self._current *= self._base
class FibonacciProgression(Progression):
def __init__(self,first=0,second=1):
super().__init__(first)
self._prev = second - first
def _advance(self):
self._prev, self._current = self._current,self._prev + self._current
if __name__ == '__main__':
print('Default Progression: ')
Progression().print_progression(10)
print('Arithmetic progression with increment 5 and start 2:')
ArithmeticProgression(5,2).print_progression(10)
print('Geometric progression with default base:')
GeometricProgression().print_progression(10)
print('Geometric progression with increasing it to the power of 2')
GeometricProgression(3).print_progression(10)
print('Fibonacci progression with default start progression')
FibonacciProgression().print_progression(10)
print('Fibonacci progression with default start progression')
FibonacciProgression(4,6).print_progression(10)
这是错误:
Default Progression:
0 1 2 3 4 5 6 7 8 9
Arithmetic progression with increment 5 and start 2:
Traceback (most recent call last):
File "some location", line 61, in <module>
ArithmeticProgression(5,2).print_progression(10)
File "some location", line 33, in __init__
super().__init__(start)
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
任何帮助将不胜感激。在这里,我试图检查 super()。ArithmeticProgression 的init (start) 但我对init () 示例中的元素传递感到非常困惑。任何帮助将不胜感激。我也是初学者。
解决方案
ArithmeticProgression
不会像继承那样从 Progression 继承GeometricProgression
。所以没有基类可以调用super()
。
替换
class ArithmeticProgression(Progression):
为
class ArithmeticProgression:
简而言之:你只是忘记了(Progression)
推荐阅读
- node.js - NodeJs - 如何在谷歌云平台上部署我的应用程序的更新版本
- linux - sh 脚本不与 Crontab 一起运行,而是手动运行
- sql-server - 创建表 6 x 6 并从上线自动溢出
- c - 使用 C 中的泰勒级数计算 sin(x) 和 cos(x)
- xml - XPath 查找文本拆分为多个后代
- javascript - 当有多个视频文件时如何定位视频元素。但也隐藏元素播放按钮并在视频结束时收听
- neo4j - 注册:Neo4j 显示空值
- javascript - React-router-V4 未将“match”属性传递给渲染组件
- database - Elasticsearch:基于过滤器构建二进制掩码
- django - django 创建新对象而不是更新