问题描述
我们假设有一个函数get_pack(),它返回一个Pack对象:
def __init __(self,name,weight):
self.name = name
self.weight = weight
...
我想要做的是将此对象包装到我的对象中,这就是说,CommercialPack有一些有用的函数:
class CommercialPack(Pack):
def get_delivery_price(self,distance):
return self.weight * PER_KM_PRICE * distance
...
然后创建一个返回CommercialPack而不是Pack的函数。在其他语言(如Delphi或Java)中,您可以在运行时键入cast该对象。所以我想有像:
def get_commercial_pack():
return CommercialPack(get_pack $ b然后你有你所需要的一切,没有麻烦。因为我希望我的CommercialPack对象具有Pack对象具有的所有属性和功能。我只是想把它包装在我的新类。基本上我不想这样做:
类CommercialPack(object):
def __init __ ,pack):
self.name = pack.name
self.weight = pack.weight
...
OR
class CommercialPack(object):
def __init __ self,pack):
self.pack = pack
非常感谢。
解决方案可能类似这样
$ b def __init __(self,pack):
self .__ dict __。update(pack .__ dict__)
如果你不介意在包和商业包之间共享状态,你甚至可以这样做。
class CommercialPack对象):
def __init __(self,pack):
self .__ dict__ = pack .__ dict__
在你的例子中应该是确定的,因为你不保存对包对象的任何其他引用
例如
<$ c $ p>PER_KM_PRICE = 100
pre>
class Pack(object):
def __init __(self,name,weight):
self.name = name
self.weight = weight
class CommercialPack(Pack):
def __init __(self,pack):
self .__ dict__ = pack .__ dict__
def get_delivery_price(self,distance):
return self.weight * PER_KM_PRICE * distance
def get_pack():
return bmp(pack,20)
cp = CommercialPack(get_pack())
print cp.get_delivery_price(3)
Let's say there is a library function called get_pack() which returns a Pack object:
class Pack(object): def __init__(self, name, weight): self.name = name self.weight = weight ...
What I want to do is to wrap this object into my object which is let's say CommercialPack which has a couple of useful functions:
class CommercialPack(Pack): def get_delivery_price(self, distance): return self.weight * PER_KM_PRICE * distance ...
And then create a function which returns CommercialPack instead of Pack. In some other languages like Delphi or Java, you can type cast that object on the fly. So I want to have something like:
def get_commercial_pack(): return CommercialPack(get_pack())
and then you have all you need with no hassle. Because I would like my CommercialPack object to have all the properties and functions that Pack object has. I just want to wrap it inside my new class. Basically I don't want to do something like this:
class CommercialPack(object): def __init__(self, pack): self.name = pack.name self.weight = pack.weight ...
OR
class CommercialPack(object): def __init__(self, pack): self.pack = pack
I'm looking for an elegant solution instead like I said, some kind of type casting or whatever I can do elegantly in Python.
Thanks very much.
解决方案Perhaps something like this
class CommercialPack(object): def __init__(self, pack): self.__dict__.update(pack.__dict__)
You can even do this if you don't mind sharing state between the pack and the commercial pack
class CommercialPack(object): def __init__(self, pack): self.__dict__ = pack.__dict__
It should be ok in your example since you aren't keeping any other references to the pack object
eg.
PER_KM_PRICE = 100 class Pack(object): def __init__(self, name, weight): self.name = name self.weight = weight class CommercialPack(Pack): def __init__(self, pack): self.__dict__ = pack.__dict__ def get_delivery_price(self, distance): return self.weight * PER_KM_PRICE * distance def get_pack(): return Pack("pack", 20) cp = CommercialPack(get_pack()) print cp.get_delivery_price(3)
这篇关于Python中的对象类型转换(设计建议)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!