Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python3类中定义许多静态(默认)参数_Python_Class_Oop_Python 3.6 - Fatal编程技术网

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

如何在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 =

我是OOP新手,我编写的类需要许多(>=9)默认的“硬编码”参数,这些参数仅在本文中使用

在类中定义这些内容的正确方法是什么

解决方案#1

或者我应该这样做

解决方案#2


谢谢

简短回答:解决方案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())