如何在 python3 类中定义许多静态(默认)参数



我是OOP的新手,编写需要许多(>=9(的类默认"硬编码"参数仅用于此参数。

定义类内那些的正确方法是什么?

解决方案#1

class SomeCLass():
__param1 = 'param1'
__param2 = 'param2'
__param3 = 'param3'
__param4 = 'param4'
def some_method(self):
return self.__param1 

或者我应该这样做

解决方案#2

class SomeCLass():
def __init__(self, param1 = 'param1', param2 = 'param2', ...., 
...param8 = 'param'):
self.param1 = param1

谢谢

简短回答:解决方案 1 将具有名为paramN的字段,解决方案 2 将具有构造函数的参数,但没有类实例中的字段。

执行此操作的简单方法是演示它。我将更改类的名称,以便它们不冲突,并且为了简洁起见,我将每个类限制为两个参数。

class SomeClass1():
param1 = 'param1'
param2 = 'param2'
def some_method(self):
return self.param1
class SomeClass2():
def __init__(self, param1 = 'param1', param2 = 'param2'):
pass
def some_method(self):
return self.param1
# prints the string 'param1'
one = SomeClass1()
print(one.some_method())
# throws a NameError, 
# because SomeClass2 instances don't have the field
two = SomeClass2()
print(two.some_method())

如果您希望 SomeClass2 具有参数字段,则需要在__init()__方法中通过捕获参数来处理它:

class SomeClass2():
def __init__(self, param1 = 'param1', param2 = 'param2'):
self.param1 = param1
self.param2 = param2

但请注意,这些参数不是您要求的硬编码

# Prints the integer 1, not the string 'param1'
two = SomeClass2(param1 = 1, param2 = 2)
print(two.some_method())     

至于哪个是正确的,这取决于你想做什么。这两种解决方案都是有效的 python 代码。

最新更新