我是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
谢谢
答案 0 :(得分:0)
简短回答:解决方案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代码。