我正在使用一个变量来保存不同类的工厂。 代码运行,但 PyCharm IDE 希望我注释工厂变量的类型,因为我正在调用它。
Q1:我应该如何注释“工厂”变量,为 XXX 插入的类型是什么?
Q2:这是对工厂进行编码的 Python 方式吗?
class Foo(object):
pass
class Bar:
pass
factory: XXX = Foo if something else Bar
instance = factory()
注释工厂变量类型和 Python 工厂模式
以下是问题的答案:
Q1:如何注释“factory”变量,XXX 应该是什么类型?
你可以使用
Union
类型提示来表示
factory
变量可以是
Foo
类或
Bar
类:
from typing import Union
class Foo(object):
pass
class Bar:
pass
factory: Union[type[Foo], type[Bar]] = Foo if something else Bar
instance = factory()
这里,
type[Foo]
和
type[Bar]
分别表示
Foo
和
Bar
的类对象。
Union
表示
factory
可以是这两种类型中的任何一种。
Q2:这是 Python 中实现工厂模式的常用方法吗?
虽然这段代码可以工作,但这并不是 Python 中实现工厂模式最常用的方法。更常见、更灵活的做法是定义一个单独的工厂函数或类:
方法 1: 使用工厂函数:
class Foo(object):
pass
class Bar:
pass
def create_instance(condition: bool) -> Union[Foo, Bar]:
"""根据条件创建 Foo 或 Bar 实例."""
if condition:
return Foo()
else:
return Bar()
instance = create_instance(something)
方法 2: 使用工厂类:
class ShapeFactory:
"""创建不同形状对象的工厂类."""
def create_shape(self, shape_type: str):
"""根据给定的形状类型创建形状对象."""
if shape_type == 'circle':
return Circle()
elif shape_type == 'square':
return Square()
else:
raise ValueError(f"Invalid shape type: {shape_type}")
factory = ShapeFactory()
circle = factory.create_shape('circle')
这两种方法都比直接将类赋值给变量更清晰、更易于维护,尤其是在需要创建更多类型的对象时。
标签:python,python-typing From: 57537873