是否有充分的理由为什么要将一个类分配给变量,如下面的代码所示?多亏了那个机械师,人们可以做些有用/有趣的事情?
"..."
答案 0 :(得分:4)
我在生产代码中最经常看到的情况是依赖注入或“编译时”配置。
例如,我可能有一些实现某些策略或命令的类,但是我还没有构造函数的详细信息。
class StrategyOne:...
class StrategyTwo:...
def my_func(vars, Strategy):
x = some_calculation(vars)
st = Strategy(x)
中可以看到使用此配置的示例
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = ('id', 'account_name', 'users', 'created')
我认为大多数用例都属于“我不想耦合到这个特定类”的原则。 Another level of indirection and all.
以type checking example为例。类型[x for x in lst if isinstance(x, types)]
的集合上的循环不依赖于任何特定类型,因此与类型列表的内容分离。
答案 1 :(得分:2)
一个重要的用例当然是类型检查或过滤:
class Foo:
pass
lst = ["bla", 42, Foo()]
types = (str, Foo)
filtered = [x for x in lst if isinstance(x, types)]
# ['bla', <__main__.Foo at 0x7fa3422aa668>]
另一个可能是用于动态创建某个类的实例,例如与defaultdict
。
class Bar:
def __init__(self):
self.value = 0
from collections import defaultdict
d = defaultdict(Bar)
for x, y in [(1,1), (1,2), (2,3), (2,4)]:
d[x].value += y
print(d[1].value) # 3
答案 2 :(得分:1)
有很多可能性。一种可能是如果您有多个类,并且您想从所有这些类中访问相同的属性。
例如:
import os, io
from google.cloud import vision
vision_client = vision.ImageAnnotatorClient('my-key.json')
file_name = os.path.join(os.path.dirname(__file__),'image_path.jpg')
with io.open(file_name, 'rb') as image_file:
content = image_file.read()
labels = vision_client.label_detection({'content': content})
labels = labes.label_annotations()
print('Labels:')
for label in labels:
print(label.description)
答案 3 :(得分:0)
我能想到的唯一可能的原因是您将多次调用构造函数。所以,而不是
df["Unit_Column"] = df["parameter"].map(dictitems).fillna("Unit Not Found")
你可以写
x1 = foo()
x2 = foo()
x3 = foo()
因此,您只能用cls = foo
x1 = cls()
x2 = cls()
x3 = cls()
更改cls=foo
,其余的都不需要更改。
但是,这仅适用于代码片段,只是为了快速尝试一下。如果您实际上需要多次执行操作,请编写一个函数。