我试图理解python的面向对象编程。
在以下代码中,当我省略类Dataset并从函数read_data_set中传递语句并尝试在不提供任何参数的情况下创建对象时-我收到错误,提示位置参数丢失。但是,当我运行此代码而不遗漏任何内容时,即使在创建对象时没有提及位置参数,它也可以正常工作。
在这种情况下为什么不引发错误?有人可以指导我以下代码中发生了什么吗?
第二,我还想知道,当我通过pass语句提及类Dataset时,是否意味着我正在创建一个新类,还是意味着我正在重新定义它?
class Dataset:
def __init__(self,MC_sample,MC_label):
self.__MC_sample = MC_sample
self.__MC_label = MC_label
def read_data_set():
class Dataset:
pass
data_sets = Dataset() #object created
return data_sets
答案 0 :(得分:0)
它起作用的原因很令人惊讶,因为您必须在def ...行之后有缩进。
如果您有缩进:
class Dataset:
def __init__(self,MC_sample,MC_label):
self.__MC_sample = MC_sample
self.__MC_label = MC_label
def read_data_set():
class Dataset:
pass
data_sets = Dataset() #object created
return data_sets
它起作用,并且read_data_set内部的DataSet类遮蔽了外部的类。
如果省略类Dataset:pass,它会尝试初始化第一个DataSet,该数据集在构造函数中需要2个参数(MC_sample和MC_label),因此会出现错误。
因此,您可以像这样创建课程:
data_sets = Dataset('MC_sample', 'MC_label') #object created
或在构造函数中提供默认值:
def __init__(self,MC_sample='default MC_sample',MC_label='default MC_label'):
self.__MC_sample = MC_sample
self.__MC_label = MC_label