Python 在类中处理预设选项的最佳方法
我想要一个可以用选项Python 在类中处理预设选项的最佳方法,python,class,arguments,Python,Class,Arguments,我想要一个可以用选项a、b和c初始化的类 c是一种特殊情况,我可以使用变量extend修改初始化 我目前正在寻找最好的方法来做到这一点。 此外,我希望我的IDE(在本例中为PyCharm)为我提供建议,我可以使用哪些参数来进行预设 我想出了两个办法 选项1: class-MyClass: def u u init u u;(自我、预设、扩展=无): 如果预设==“a”: self.x=1 如果预设==“b”: self.x=2 如果预设==“c”: self.x=3 如果扩展!=无: self.
a
、b
和c
初始化的类
c
是一种特殊情况,我可以使用变量extend
修改初始化
我目前正在寻找最好的方法来做到这一点。
此外,我希望我的IDE(在本例中为PyCharm)为我提供建议,我可以使用哪些参数来进行预设
我想出了两个办法
选项1:
class-MyClass:
def u u init u u;(自我、预设、扩展=无):
如果预设==“a”:
self.x=1
如果预设==“b”:
self.x=2
如果预设==“c”:
self.x=3
如果扩展!=无:
self.x=self.x+扩展
定义(自我):
返回f“x的值为{self.x}”
Y=MyClass(预设=“c”,扩展=3)
打印(Y)
#out:x的值是6
选项2:
类别MyClass2:
定义初始化(自):
self.x=无
def预设_a(自身):
self.x=1
def预设_b(自身):
self.x=2
def预设_c_和_扩展(自身,扩展):
self.x=3+extend
定义(自我):
返回f“x的值为{self.x}”
Y2=MyClass2()
Y2.预设_b()
打印(Y2)
#out:x的值是2
选项1在我看来更优雅,但在我的工作流程中,我不想去实现中初始化某个预设以查找选项
但这是必要的,因为我记不起是否将预设命名为a
,或者它是否不是a
。
选项1还不清楚我是否可以添加一个选项extend
。
这里可能会出现这样的情况:我将预设a
与extend=3
一起使用,我想知道为什么不应用extend
因此,实际的问题是:是否有一种优雅的方式可以在不查看类实现的情况下查看预设选项?(也许是某种类型的暗示?)
选项2有此机会,通过IDE中的自动完成,我可以看到可以应用哪些预设。但它看起来不太优雅
我对你的想法很好奇 那么:
class MyClass2:
def __init__(self, x):
self.x = x
@staticmethod
def preset_a():
return MyClass2(1)
@staticmethod
def preset_b():
return MyClass2(2)
@staticmethod
def preset_c_with_extend(extend):
return MyClass2(3+extend)
def __str__(self):
return f"The value of x is {self.x}"
Y2=MyClass2.preset_b()
print(Y2)
它确保在对象创建时设置x
,并允许IDE自动完成。如何:
class MyClass2:
def __init__(self, x):
self.x = x
@staticmethod
def preset_a():
return MyClass2(1)
@staticmethod
def preset_b():
return MyClass2(2)
@staticmethod
def preset_c_with_extend(extend):
return MyClass2(3+extend)
def __str__(self):
return f"The value of x is {self.x}"
Y2=MyClass2.preset_b()
print(Y2)
它确保在对象创建时设置
x
,并允许IDE自动完成。另一种选择是使用预设dict
。然而,我不知道PyCharm将如何对待这个解决方案的建议
class MyClass:
PRESETS = {"a": 1, "b": 2, "c": 3}
def __init__(self, preset, extend=None):
self.x = self.PRESETS.get(preset)
if preset == "c" and extend is not None:
self.x += extend
def __str__(self):
return f"The value of x is {self.x}"
请注意,使用了
dict
的.get()
方法,这意味着如果尝试使用不存在的预设,则x
将是None
。另一种选择是使用预设dict
。然而,我不知道PyCharm将如何对待这个解决方案的建议
class MyClass:
PRESETS = {"a": 1, "b": 2, "c": 3}
def __init__(self, preset, extend=None):
self.x = self.PRESETS.get(preset)
if preset == "c" and extend is not None:
self.x += extend
def __str__(self):
return f"The value of x is {self.x}"
请注意,
dict
的.get()
方法被使用,这意味着如果您尝试使用一个不存在的预设,那么x
将是None
。谢谢,这比我的选项1更好,但是@Michael Butscher的解决方案更符合我的要求。谢谢,这比我的选项1更好,然而@Michael Butscher的解决方案更符合我的要求。哇,太棒了!我喜欢它的递归部分。IDE自动完成也是可能的:)哇,太漂亮了!我喜欢它的递归部分。IDE也可以自动完成:)