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

2024-09-28 20:47:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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

谢谢


Tags: gtself编码参数定义def解决方案oop
1条回答
网友
1楼 · 发布于 2024-09-28 20:47:17

简短回答:解决方案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字段,则需要通过捕获参数在__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代码。你知道吗

相关问题 更多 >