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为什么就不用预先赋予一个空列表呢?
你的第一个是直接将['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()
class Privileges():
def __init__(self):
self.privileges=[' can add post',' can delete post',' can ban user']
def show_privileges(self):
for privilege in self.privileges:
print("Admin"+privilege)
admin = Privileges()
admin.show_privileges()
如果你直接给类的privileges属性赋值,那你privileges变量就可以删除了呀
class Privileges():
def __init__(self,a):
self.privileges=a
def show_privileges(self):
for privilege in self.privileges:
print("Admin"+privilege)
a = [' can add post',' can delete post',' can ban user']
admin = Privileges(a)
admin.show_privileges()
class A:
def __init__(self, a, b=1):
print('没有默认参数',a)
print('有默认参数',b)
self.b = b
def hanshu(self):
print(a)
print(self.b)
c = A(a=0)
c.hanshu()
这个赋值给属性的作用在于之后的其他函数可以直接 self.属性名称 调用这个属性的值,如果不赋值给属性的话,就像上面这个a,在hanshu()里面调用会出错的:
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-1-e3deed356b4f> in <module> 10 11 c = A(a=0) ---> 12 c.hanshu() 13 14 d = A(3,4) <ipython-input-1-e3deed356b4f> in hanshu(self) 6 7 def hanshu(self): ----> 8 print(a) 9 print(self.b) 10 NameError: name 'a' is not defined