我有以下示例设置:
class Feet:
def __init__ (self, value = 0.0):
self.value = value
self.units = "f"
def feet(self):
return self.value
class Meters:
def __init__(self, value = 0.0):
self.value = value
self.units = "m"
def feet(self):
# This is probably not an accurate conversion.
return self.value * 2.54 * 10
class Distance (Feet, Meters):
def __init__(self, type = Feet()):
Feet.__init__(self)
Meters.__init__(self)
print type.feet() -- Prints 254.0
self = type
print self.feet() -- Prints 254.0
dist = Distance(Meters(10.0))
print dist.units -- Prints = "m"
print dist.value -- Prints = 0.0
print dist.feet() -- Prints = 0.0
我似乎无法理解为什么当我将类初始化为Meters类类型并将其指定为10.0时,我不保留10.0.然而,单位似乎保持正确.我错过了有关如何设置的内容吗?
我的理解是,我正在创建Meters的“实例”,并将其分配给Distance的“self”变量.如果自我值无法修改,我可以理解我的单位是否为“f”,但我的单位是“m”所以它显然将Meters类分配给自己,但它没有采用实例化的值,我觉得很奇怪.
说实话我甚至不知道在这种情况下我会谷歌,所以我道歉我没有做过很多谷歌搜索,我发现的大部分内容根本不适用于这类问题.
另外,我的计划是基本上将它“转换”为相同的类型,无论你传入什么,例如脚我会返回Feet类的自我实例,而在Meters类中我会返回Feet(self.Value) * 2.54 * 10)所以我总是在脚上有距离.
所以脚脚变成了
def feet(self):
return self
因为米脚变成了
def feet(self):
return Feet(self.value * 2.54 * 10)
回顾一下,有没有理由我能够在初始化过程中传入2个类中的1个,但它不会为该类接受我的初始化参数?
我真的不清楚为什么我可以在距离类中指定“自我”,在它返回之前它似乎有正确的初始化但在返回时它不能正常工作.
解决方法:
问题是你继承了2类Feet and Meters.两个类都有相同的方法.在您的Distance .__ init __()方法中,在执行此操作时,您将使用Meters的方法覆盖Feet的方法:
Feet.__init__(self)
Meters.__init__(self)
我会做的不同:
class Distance(object):
def __init__(self, meters=None, feet=None):
self.feet = feet
self.meters = meters
然后你可以这样做:
distance = Distance(meters=Meters(12))
print distance.meters.value
print distance.meters.type
# Here do whatever you want with them
您可以同时传入这两个对象.并做一些其他的东西
两个对象如果两者都不同于None.
标签:python,class,python-2-7,initialization,multiple-inheritance
来源: https://codeday.me/bug/20190725/1532999.html