gpt4 book ai didi

python - 将函数放置在不依赖于状态的类之外

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:44 24 4
gpt4 key购买 nike

在研究最佳软件工程实践时,让我感到困惑的一件事是如何处理不改变状态或以其他方式与状态交互的类中的方法。

this article我喜欢作者如何讨论数据和逻辑的分离。但是在尝试将其应用于实践时,我遇到了这样的情况:我在类外部有一个奇怪的函数,它不会改变对象的状态,但在对象外部并不真正相关。

例如:

def inspect_color(color):
if color == 'brown':
return 'Similar to chocolate'

class Dog(object):

def __init__(self, color):
self.color = color

def play_in_mud(self):
self.color = 'brown'
results = inspect_color(self.color)

对比

class Dog(object):

def __init__(self, color):
self.color = color

def play_in_mud(self):
self.color = 'brown'
results = self.inspect_color()

def inspect_color(self):
if self.color == 'brown':
return 'Similar to chocolate'

是否有一般的软件工程原则或最佳实践(来自任何合理的范例)建议应遵循这些方法中的哪一个?由于多种原因,我的直觉告诉我顶部的更好,除了这样做:inspect_color(self.color) 困扰我,所以我不确定。我阅读了一些资料,但没有找到针对此类案例的最佳实践的明确答案。

最佳答案

那是一个staticmethod有利于。

A static method does not receive an implicit first argument.

class Dog(object):

def __init__(self, color):
self.color = color

def play_in_mud(self):
self.color = 'brown'
results = self.inspect_color(self.color)
return results

@staticmethod
def inspect_color(color):
if color == 'brown':
return 'Similar to chocolate'

你可以像函数一样使用它:

>>> Dog.inspect_color('brown')
'Similar to chocolate'

在你的方法中:

>>> dog = Dog('red')
>>> dog.play_in_mud()
'Similar to chocolate'

关于python - 将函数放置在不依赖于状态的类之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41731023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com