Ins*_*ter 3 python coding-style
Python缺乏静态类型使得可以在不导入类的情况下使用和依赖类.你应该导入它们吗?有关系吗?
someclass.py
class SomeClass:
def __init__(self, some_value):
self.some_value = some_value
Run Code Online (Sandbox Code Playgroud)
someclient.py
class SomeClient:
def __init__(self, some_class_instance):
self.some_class_helper = some_class_instance
Run Code Online (Sandbox Code Playgroud)
在这里,功能SomeClient明显依赖于SomeClass或至少表现得像它的东西.但是,someclient.py可以在没有的情况下正常工作import someclass.这个可以吗?使用某些东西而不说任何你甚至使用它的东西都是错误的.
是的,这完全没问题.some_class_instance可能是任何东西,它不一定是一个实例SomeClass.例如,您可能希望传递一个看起来很像的实例SomeClass,但是使用不同的实现来进行测试.
导入SomeClass不会对代码的工作方式产生任何影响.
如果您担心使代码可理解,请评论SomeClient需要SomeClass实例的事实,并/或在docstring中记录它.
如果你想警告SomeClient需要SomeClass实例的事实,你可以assert:
class SomeClient:
def __init__(self, some_class_instance):
assert isinstance(some_class_instance, SomeClass)
self.some_class_helper = some_class_instance
Run Code Online (Sandbox Code Playgroud)
这将需要导入SomeClass.但请注意,你在那里相当严格 - 例如,它排除了使用Mock SomeClass进行测试.(这里有一个冗长的咆哮:"isinstance()被认为是有害的".)