我是面向对象编程的新手。在定义了一个类之后,我们仅创建对象并尝试访问该类内部的不同变量和函数。在下面的代码中,我想知道为什么我们再次不得不在函数ans中提到类Dataset,然后pass语句的作用是什么?
def read_data_set():
class Dataset:
pass
data_sets = Dataset()
return(data_sets)
#Function call
x=read_data_set()
print(x)
答案 0 :(得分:2)
它基本上什么都不做。
它经常像代码中一样用作占位符;您会注意到,没有pass
的代码根本不会运行。
class SomeClass:
pass # to be filled
这是因为Python期望某些东西在SomeClass
的定义之下,但是如果为空,它将引发IndentationError
。
class SomeClass:
# to be filled <--- empty
other_function() # <--- IndentationError
当您不想执行任何操作时,它也与try
-except
一起使用:
try:
some_stuff()
except SomeException:
pass # I don't mind this
答案 1 :(得分:2)
pass
不执行任何操作,只会使Python缩进正确。
假设您要创建一个空函数,例如:
def empty_func():
empty_func() # throws IndentationError
让我们尝试在其中添加评论:
def empty_func_with_comment():
# empty
empty_func_with_comment() # throws IndentationError
要使其正常工作,我们需要使用pass来修复缩进:
def empty_func_with_pass():
pass
empty_func_with_pass() # it works
答案 2 :(得分:1)
我们为什么在函数中两次提及类Dataset?
第一次
class Dataset:
pass
该类已定义
和第二个:
data_sets = Dataset()
创建此类的一个实例(一个对象)。就像OP所写的一样:
定义类后,我们只需创建对象即可。
由于class
只是一个python语句,因此可以在任何地方使用:包括函数体,在这种情况下。因此,这里的类是在每次调用函数read_data_set()
时定义的,如果未调用,则根本不会定义。
pass语句的作用是什么?
在此示例中
class Dataset:
pass
pass
语句意味着定义一个没有在其中添加任何成员的类。这意味着该类及其对象仅包含任何类从object
派生的一些“默认”函数和变量(即方法和字段)。
通常,当您引入一个新块并将其保留为空时,使用pass
:
expression:
pass
您必须在一个块内至少包含一条指令,这就是为什么有时您需要pass
来表示您不想在该块内执行任何操作的原因。对于函数来说确实如此:
def do_nothing():
pass # function that does nothing
循环:
for i in collection: # just walk through the collection
pass # but do nothing at each iteration
异常处理:
try:
do_something()
except SomeException:
pass # silently ignore SomeException
上下文管理器:
with open(filename): # open a file but do nothing with it
pass
答案 3 :(得分:0)
pass语句意味着您无需定义构造函数或任何属性即可初始化类。尝试忽略它:您看到的错误是由于python期望以下行属于您的类,并且会认为所使用的缩进不正确。
关于在函数中再次调用类名的事实:这意味着您正在实例化刚刚定义的类。因此,函数返回的是类的对象。