我开始在PHP中学习编程/OOP。据我对PHP最佳实践的了解,如果一个类不带任何参数,可以不带括号地实例化它。在
例如$class = new Class;
与之相反的是:
^{pr2}$
我开始将我的技能扩展到python中,昨天我浪费了大约5个小时试图弄清楚为什么一个函数不能通过一个参数,尽管它非常简单。我的代码:class MainViewWidgets(MainViewContainer):
def __init__(self):
# instantiating like this prevents MainViewController.getHeaderItems from returning the arg passed to it, however the code still "works" in some sense
self.controller = MainViewController
#this works
self.controller = MainViewController()
def createHeaderOptionCheckbox(self, pane):
self.header_string = StringVar()
header_checkbox = ttk.Checkbutton(pane, text='Data Contains Headers', variable=self.header_string, onvalue='headers', offvalue='keys')
self.header_string.trace('w', self.headerOptionCheckboxChanged)
return header_checkbox
def headerOptionCheckboxChanged(self, *args):
print(self.header_string.get())
#will print "headers" or "keys" on checkbox toggle
print(self.controller.getHeaderItems(self.header_string.get()))
#prints "default"
class MainViewController:
def __init__(self):
self.CheckFile = CheckFile()
get_config = GetConfiguration('config.ini')
self.config_file = get_config.getProperty('directory', 'input_file')
self.csv = CSVReader(self.config_file)
self.chosen_index = None
def getHeaderItems(self, header='default'):
return header
有人能帮助我理解为什么在Python中,即使除了self之外没有构造函数参数,也需要用括号实例化一个类。另外,为什么MainViewController仍然可以工作,但是它的行为却没有我想要的那样?因为它是加载的,函数“做了一些事情”,但它似乎不接受参数。实例化一个没有括号的类有什么好处吗?在
请注意,我不需要帮助让这个代码工作,我只是想了解为什么会发生这种情况。在