【问题标题】:How to define many static (default) parameters inside the class python3如何在类python3中定义许多静态(默认)参数
【发布时间】:2017-08-16 20:45:48
【问题描述】:

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

谢谢

【问题讨论】:

  • 这两件事是不一样的,你需要的取决于你的具体情况。
  • 您在第一个示例中使用了 类属性。在第二个示例中,您的__init__ 函数有一堆默认参数,您可能会将其设置为instance attributes。这些是不同的情况。此外,除非您了解它在做什么,否则不要使用双下划线名称修饰,即使那样,也可能不会......
  • 此外,虽然类属性类似于 java 等语言中的静态成员,但它们根本不等同于默认参数。
  • @juanpa.arrivillaga 没有询问 java,如果您没有建议,关于您没有评论的实际问题,谢谢
  • @jonrsharpe 谢谢,以后会继续阅读

标签: python class oop python-3.6


【解决方案1】:

简答:解决方案 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 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多