在python中,类可以作为参数传入函数,如果我在一个类的方法中new了参数来创建对象,是不是依然有耦合性,这样做是不是不好
时间: 2024-03-11 22:47:34 浏览: 90
如果在一个类的方法中使用`ClassName()`或者`Class()`这样的方式来创建对象,确实会存在一定的耦合性,因为这个方法只能够创建这个特定的类的对象,而不能够创建其他的类的对象。
为了避免这种耦合性,可以将要创建的对象作为参数传入类的方法中。例如,可以将要创建的对象的类型作为参数传入方法中,然后使用工厂方法来创建对象。这样就可以在方法中创建不同类型的对象,而不需要直接使用`ClassName()`或者`Class()`这样的方式来创建对象。
下面是一个示例:
```python
class UserRepository:
pass
class UserService:
def __init__(self, repo_factory):
self.repo = repo_factory()
def create_mysql_repo():
return UserRepository()
service = UserService(create_mysql_repo)
```
在这个例子中,`UserService`类的构造函数接收一个`repo_factory`参数,这个参数是一个callable,它返回一个`UserRepository`对象。在创建`UserService`对象时,我们传入了一个名为`create_mysql_repo`的函数,这个函数返回一个`UserRepository`对象。
在`UserService`对象的构造函数中,我们使用`repo_factory()`来创建一个`UserRepository`对象。因为`repo_factory`是一个callable,所以调用`repo_factory()`会返回一个新的`UserRepository`对象。
通过这种方式,我们可以将要创建的对象的类型作为参数传递给方法中,从而避免了直接在类的方法中使用`ClassName()`或者`Class()`这样的方式来创建对象,降低了耦合性。
阅读全文