2 回答
![?](http://img1.sycdn.imooc.com/533e4bec0001ae5302000200-100-100.jpg)
TA贡献1856条经验 获得超5个赞
你写了:
a 的扩散常数Substance取决于Water
这让我们认为扩散常数是物质的特征,因此该类Substance应该拥有允许计算它的方法(使用参数来提供实例,Water因为它依赖于它)。
这对于大多数简单的情况都很有效,如果一个真正的概念拥有一个特征,那么它的模型(在这种情况下是一个类)应该拥有相关的属性或方法。
一些设计模式和/或更复杂的需求可能有理由打破这个“规则”以引入更多吸引力。
self另外,回答你的评论:传递给函数 不是问题(至少在我看来) 。self只是对当前实例的引用,没有什么特别的,只是它是命名当前实例的广泛尊重的约定,因此也是(实例)方法的第一个参数。
进一步解释一下:实例方法必须接受对相关实例的引用作为第一个参数。按照惯例,这个位置参数被命名为self,但您可以决定将其命名为this,instance或者无论您想要什么,它都是一样的。然后您只需在方法中使用正确的参数名称即可。
请参阅下面的代码。它为实例参数使用了非常糟糕的名称,但它的工作原理就好像self已经被使用过一样:
class Foo:
def __init__(current_instance):
current_instance.bar = 'baz'
def __str__(this_name_is_ridiculous):
return this_name_is_ridiculous.bar
print(Foo()) # prints baz
![?](http://img1.sycdn.imooc.com/5333a1660001394602000200-100-100.jpg)
TA贡献1862条经验 获得超6个赞
我认为Water继承了一些东西Substance。那么你可以diffusion_constant在每个中都有一个Substance,也可以有一个diffuse带有一个或多个Substances 的函数
编辑:
class Water:
def diffuse(self, *args):
#check if args is greater 0 or None and then iterate and apply diffusion_constants
class Substance:
diffusion_constant = 0 #base constant
class Sirup(Substance):
diffusion_constant = 3
#somewhere later then
corn_sirup = Sirup()
sugary_sirup = Sirup()
water = Water()
water.diffuse(corn_sirup, sugary_sirup)
编辑:由于评论,我更改了代码。Python 具有鸭子类型,因此只要您的物质具有diffusion_constant属性,就可以访问它,无论它是什么。然后应该这样做
添加回答
举报