skypppl 2021-04-21 15:01 采纳率: 50%
浏览 78
已采纳

python的类定义的属性如果是列表为什么要预先赋值一个空列表

class Privileges():
	def __init__(self,privileges=[]):
		self.privileges=['can add post','can delete post','can ban users']
	def show_privileges(self):
		for privilege in self.privileges:
			print(" --"+privilege)
			
admin=Admin('bruce','lee')
admin.privileges.show_privileges()

请问为什么第二行的privileges后面要预先赋值一个空列表呢?否则就会报错。

class Privileges():
    def __init__(self,privileges):
        self.privileges = privileges
    def show_privileges(self):
        for privilege in self.privileges:
            print("Admin" + privilege)
admin = Privileges([' can add post',' can delete post',' can ban user'])
admin.show_privileges()

我知道赋予空列表是给一个默认值,但如果是上面这样编写,那第二行的privilegs为什么就不用预先赋予一个空列表呢?

  • 写回答

4条回答 默认 最新

  • kaili_ya 2021-04-21 15:47
    关注

    你的第一个是直接将['can add post','can delete post','can ban users']赋值给了类的属性privileges,在实例化类时,因为有默认参数,所以你没传参也没报错啊,而第二个是将['can add post','can delete post','can ban users']当做privileges参数传入到了Privileges类中,这时候没有默认参数,你传参了所以不报错,不传参就会报错啊

     

    这是没有默认值的,也就是说必须传入privileges参数,否则会报错:

    class Privileges():
        def __init__(self,privileges):
            self.privileges=privileges
        def show_privileges(self):
            for privilege in self.privileges:
                print("Admin"+privilege)
    
    admin = Privileges([' can add post',' can delete post',' can ban user'])
    admin.show_privileges()

    这是有默认值的,可以不传入参数:

    class Privileges():
        def __init__(self,privileges=[]):
            self.privileges = privileges
        def show_privileges(self):
            for privilege in self.privileges:
                print("Admin" + privilege)
                
    admin = Privileges()
    admin.show_privileges()

    也可以传入参数:

    class Privileges():
        def __init__(self,privileges=[]):
            self.privileges = privileges
        def show_privileges(self):
            for privilege in self.privileges:
                print("Admin" + privilege)
                
    admin = Privileges([' can add post',' can delete post',' can ban user'])
    admin.show_privileges()

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?