【问题标题】:attributeError: 'list' object has no attribute.....属性错误:“列表”对象没有属性.....
【发布时间】:2018-11-29 19:36:38
【问题描述】:

我收到attributeError,但我不明白....

class User():

    def __init__(self, first, last, age):
        self.first = first
        self.last = last
        self.age = age
        self.login_attempt = 0

class Admin(User):

    def __init__(self, first, last, age):
        super().__init__(first, last, age)
        self.privilages = Privilages()


class Privilages():

    def __init__(self, privilages = ''):
        self.privilages = []

    def show_privilages(self):
        print("There are the privilages... : ")
        if self.privilages:
            for privilage in self.privilages:
                print("- " + privilage)
        else:
             print("The user has no privilages. ")


sarah.privilages = ['can add post', 'can delete post']
sarah.privilages.show_privilages()

我不确定我在这里遗漏了什么,我使用 for 循环遍历列表并将其打印出来,但是我不断收到“'list' object has no attribute 'show_privileges'”的错误

【问题讨论】:

  • 您在上面的行中执行sarah.privilages = []sarah.privilages 然后是一个列表。你的意图是什么?你的意思是sarah.privilages.privilages = [...]
  • 不是您的错误的原因,而是“特权”拼写为“e”。
  • 糟糕!我没有太注意拼写。不管怎样,我做了sarah.privilages = [] 因为我想把值放在self.privilages = [] 中。你能解释一下为什么是sarah.privilages.privilages = []吗?
  • @Sarah 因为您从 Admin 类对象开始,然后您访问它的属性“privileges”,即 Privileges 类,然后从该类中访问 show_privileges

标签: python list attributeerror


【解决方案1】:

您正在为sarah.privilages 分配一个列表,因此它肯定没有show_privilages 方法。您应该使Admin__init__ 方法将权限列表作为参数,以便它可以传递给Privilages__init__ 方法以初始化其privilages 属性:

class Admin(User):
    def __init__(self, first, last, age, privilages):
        super().__init__(first, last, age)
        self.privilages = Privilages(privilages)


class Privilages():
    def __init__(self, privilages):
        self.privilages = privilages

    def show_privilages(self):
        print("There are the privilages... : ")
        if self.privilages:
            for privilage in self.privilages:
                print("- " + privilage)
        else:
             print("The user has no privilages. ")

sarah = Admin('sarah','mary','smith', ['can add post', 'can delete post'])
sarah.privilages.show_privilages()

这个输出:

There are the privilages... : 
- can add post
- can delete post

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2022-01-20
    • 1970-01-01
    • 2020-05-07
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多