gpt4 book ai didi

Python类继承初始化

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:39 25 4
gpt4 key购买 nike

我有以下示例设置:

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”变量。如果无法修改 self 值,我可以理解我的单位是“f”,但我的单位是“m”,所以它显然是将 Meters 类分配给 self,但它没有采用实例化值,我觉得这很奇怪.

老实说,我什至不知道在这种情况下我会用谷歌搜索什么,所以我很抱歉我没有做很多谷歌搜索,我发现的大部分内容根本不适用于此类问题.

此外,我的计划是基本上将它“转换”为相同的类型,无论您传入什么,例如对于脚,我将返回 Feet 类的 self 实例,而在 Meters 类中,我将返回 Feet( self.Value * 2.54 * 10) 所以我的距离总是以英尺为单位。

所以对于 Feet 脚就变成了

def feet(self):
return self

对于米英尺变为

def feet(self):
return Feet(self.value * 2.54 * 10)

回顾一下,我能够在初始化过程中传入 2 个类中的 1 个,但它不接受该类的初始化参数是什么原因?

我真的不清楚为什么我可以在距离类中分配“self”,并且在它返回之前似乎进行了正确的初始化,但在返回时它无法正常工作。

最佳答案

问题是您继承自 2 个类 Feet 和 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类继承初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com