【问题标题】:AttributeError: 'Stud' object has no attribute 'sno' at line no.11AttributeError:“Stud”对象在第 11 行没有属性“sno”
【发布时间】:2021-11-09 19:33:36
【问题描述】:

程序是:

class Stud:
    def __init__(self):
        self.displval()
        print("I am Constructor")    
        self.sno = int(input("Enter the roll number"))
        self.sname = (input("Enter the Name"))
    def displval(self):
        print("="*50)
        print(self.sno)
        print(self.sname)

so = Stud() 

【问题讨论】:

  • 你在调用displval之前你设置了它试图显示的两个属性。
  • Stud.__init__ 应该将值作为参数,而不是提示用户输入值。

标签: python class object constructor


【解决方案1】:

您的主要问题是您在设置它尝试显示的属性之前调用self.displval

class Stud:
    def __init__(self):
        print("I am Constructor")    
        self.sno = int(input("Enter the roll number"))
        self.sname = (input("Enter the Name"))
        self.displval()

    def displval(self):
        print("="*50)
        print(self.sno)
        print(self.sname)

但是,__init__ 做的工作太多。它应该接收值作为参数并简单地设置属性。如果您希望Stud 提供一种从用户那里收集这些参数的方法,请定义一个额外的类方法。 (__init__ 是否应该将任何内容打印到标准输出也值得商榷,但我暂时不讨论。)

class Stud:
    def __init__(self, sno, sname):
        self.sno = sno
        self.sname = sname
        self.displval()

    @classmethod
    def create_with_user_input(cls):
        sno = int(input("Enter the roll number"))
        sname = (input("Enter the Name"))
        return cls(sno, sname)

    def displval(self):
        print("="*50)
        print(self.sno)
        print(self.sname)

so = Stud.create_from_user_input()

【讨论】:

    【解决方案2】:
    class Stud:
        def __init__(self):
    
            print("I am Constructor")
            self.sno = int(input("Enter the roll number"))
            self.sname = (input("Enter the Name"))
            self.displval()
    
        def displval(self):
            print("="*50)
            print(self.sno)
            print(self.sname)
    
    so = Stud()
    

    self.displval()放在最后。你在它有任何self.[value] 传递给方法之前调用它。

    【讨论】:

    • 别担心,你不应该真的在 init 方法中打印。我会考虑创建一个新的def input(self) 方法并将它们分开。所以 init 只是设置 self.parameters
    猜你喜欢
    • 2020-07-12
    • 2020-11-07
    • 1970-01-01
    • 2020-07-16
    • 2012-12-01
    • 2021-04-19
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多