如何在python3类中定义许多静态(默认)参数
我是OOP新手,我编写的类需要许多(>=9)默认的“硬编码”参数,这些参数仅在本文中使用 在类中定义这些内容的正确方法是什么 解决方案#1 或者我应该这样做 解决方案#2如何在python3类中定义许多静态(默认)参数,python,class,oop,python-3.6,Python,Class,Oop,Python 3.6,我是OOP新手,我编写的类需要许多(>=9)默认的“硬编码”参数,这些参数仅在本文中使用 在类中定义这些内容的正确方法是什么 解决方案#1 或者我应该这样做 解决方案#2 谢谢简短回答:解决方案1将有名为paramN的字段,解决方案2将有构造函数的参数,但不包括类实例中的字段 实现这一点的简单方法是演示它。我将更改类的名称,这样它们就不会冲突,为了简洁起见,我将每个类的名称限制为两个参数 class SomeClass1(): param1 = 'param1' param2 =
谢谢简短回答:解决方案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具有param字段,则需要通过捕获参数在\uuuu init()\uuu
方法中处理该字段:
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代码。这两种方法不一样,具体取决于您的特定上下文。在第一个示例中,您使用的是类属性。在第二个示例中,您的
\uuuu init\uuu
函数有一组默认参数,您可能会将这些参数设置为实例属性。这是不同的情况。此外,除非您了解它在做什么,否则不要使用双下划线名称混乱,即使这样,也可能不会…此外,虽然类属性类似于java等语言中的静态成员,但它们实际上根本不等同于默认参数。@juanpa.arrivillaga没有询问java,如果您没有建议,关于实际问题,你没有评论,thanks@jonrsharpe谢谢,到时我会读更多的
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())