假设我有一个这样的简单类:
class Class1(object):
def __init__(self, property):
self.property = property
def method1(self):
pass
Class1的实例返回一个可以在其他类中使用的值:
class Class2(object):
def __init__(self, instance_of_class1, other_property):
self.other_property = other_property
self.instance_of_class1 = instance_of_class1
def method1(self):
# A method that uses self.instance_of_class1.property and self.other_property
这很有效。但是,我觉得这不是一种非常常见的方法,也许有其他选择。说完这个之后,我尝试重构我的类以将更简单的对象传递给Class2,但我发现将整个实例作为参数传递实际上显着简化了代码。为了使用它,我必须这样做:
instance_of_class1 = Class1(property=value)
instance_of_class2 = Class2(instance_of_class1, other_property=other_value)
instance_of_class2.method1()
这与某些R包的外观非常相似。是否有更多的“Pythonic”替代品?
答案 0 :(得分:3)
这样做并没有错,尽管在这个特定的例子中看起来你可以轻松做到
instance_of_class2 = Class2(instance_of_class1.property, other_property=other_value).
但如果您发现需要在Class1
内使用Class2
的其他属性/方法,请继续将整个Class1
实例传递到Class2
。这种方法一直在Python和OOP中使用。许多常见的设计模式要求类获取其他类的实例(或多个实例):代理,外观,适配器等。