python - 为什么我可以从子类中的父级访问一些参数(而有些则不能)?
问题描述
我一直在尝试并试图找到答案,但仍然不明白为什么我可以访问一些没有传递给子类而有些没有传递的参数。
鉴于此代码:
class Signals(object):
def __init__(self, numbers):
super().__init__()
self.numbers = numbers
self.factor = 2
def get_calculations(self):
self.beau = Beau(self.numbers)
self.beau.calculation()
self.jolais = Jolais()
self.jolais.calculation()
print("self.beau.value", self.beau.value)
print("self.beau.avg", self.beau.avg)
print("self.jolais.value", self.jolais.value)
print("self.jolais.avg", self.jolais.avg)
class Beau(Signals):
def __init__(self, numbers):
super().__init__(numbers)
def calculation(self):
numbers = self.numbers
factor = self.factor
self.value = sum(numbers) * factor
self.avg = self.value/len(numbers)
class Jolais(Signals):
def __init__(self):
super().__init__()
def calculation(self):
numbers = [1,1,1]
if type(self.numbers) == type(list()):
numbers = self.numbers
factor = self.factor
self.value = sum(numbers) * factor
self.avg = self.value/len(numbers)
Signals([1,2,3]).get_calculations()
..不会工作:__init__() missing 1 required positional argument: 'numbers'
将此位替换为:
class Jolais(Signals):
def __init__(self):
super().__init__("anything")
..会给我预期的结果:
self.beau.value 12
self.beau.avg 4.0
self.jolais.value 6
self.jolais.avg 2.0
那为什么self.factor
即使没有通过也self.numbers
不能访问呢?
解决方案
我不确定您对代码的意图是什么,但您似乎有一个类层次结构,其中基类也尝试创建其子类的实例,这看起来很奇怪。
假设您想要一个层次结构,其中 Beau 和 Jolais 进行不同/更专业的计算,这可行:
class Signals(object):
def __init__(self, numbers):
super().__init__()
self.numbers = numbers
self.factor = 2
self.value = None
self.avg = None
def printvalues(self):
print("value", self.value)
print("avg", self.avg)
def calculation(self):
raise Exception( "Calculation not implemented in Signal")
class Beau(Signals):
def __init__(self, numbers):
super().__init__(numbers)
self.factor = 3
def calculation(self):
numbers = self.numbers
factor = self.factor
self.value = sum(numbers) * factor
self.avg = self.value/len(numbers)
class Jolais(Signals):
def __init__(self,numbers):
super().__init__(numbers)
# gave this a different factor from Beau
self.factor = -4
def calculation(self):
numbers = [1,1,1]
if type(self.numbers) == type(list()):
numbers = self.numbers
factor = self.factor
self.value = sum(numbers) * factor
self.avg = self.value/len(numbers)
beau = Beau([1,2,3])
jolais = Jolais([5,6,7])
print( "Beau" )
beau.printvalues()
beau.calculation()
beau.printvalues()
print( "Jolais" )
jolais.printvalues()
jolais.calculation()
jolais.printvalues()
结果:
Beau
value None
avg None
value 18
avg 6.0
Jolais
value None
avg None
value -72
avg -24.0
推荐阅读
- c++ - 对序列进行分区以最小化差异
- javascript - 如何从电子表格中获取值以显示在我的网络应用程序上?
- sql - TSQL:在每列中为所有行查找奇数和偶数
- python - 正则表达式在数字序列中查找数字、连字符和逗号
- c - 我的 macbook 无法运行 clion
- c++ - 如何使用“顺时针/螺旋规则”读取 const 类成员函数?
- angular - ng serve 在角度应用程序中引发错误
- google-apps-script - 对 bigquery.jobs.getQueryResults 的 API 调用失败并出现错误:未找到:作业
- maven - 使用 Maven 设置 mssql-jdbc_auth
- excel - 将 VBA 与非活动工作表的“选择”一起使用