python中的继承的初始化_Python类继承初始化

我有以下示例设置:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值