如何在类中的函数之间传递变量,同时将它们定义为对象?

2024-10-02 22:30:27 发布

您现在位置:Python中文网/ 问答频道 /正文

class C():
    def A(self):
        mm=[]
        kk=[]
        x="Y"
        while x=="Y":
            x=input("do you have any stuff?[Y/N]: ")
            if x=="N":
                break
            mm.append(input("enter the name of the thing: "))
            kk.append(input("Enter the value of the thing: "))
     def printing(self):
        print("="*100)
        print("stuff")
        for i in range(0,len(self.mm)):
            print(self.mm[i]," "*20,self.kk[i])
shr = C()
shr.A()
shr.printing()

代码给出了一个属性错误, “C”对象没有属性“mm” 有人知道如何解决这个错误吗


Tags: oftheselfinput属性def错误mm
2条回答

如果需要类字段,则必须将它们放在__init__方法中。 在您的情况下,您应该这样做:

class C:
    def __init__(self):
        self.mm = []
        self.kk = []
    def A(self):
        x="Y"
        while x=="Y":
            x=input("do you have any stuff?[Y/N]: ")
            if x=="N":
                break
            self.mm.append(input("enter the name of the thing: "))
            self.kk.append(input("Enter the value of the thing: "))
     def printing(self):
        print("="*100)
        print("stuff")
        for i in range(0,len(self.mm)):
            print(self.mm[i]," "*20,self.kk[i])
shr = C()
shr.A()
shr.printing()

您可以在__init__内创建变量。此变量称为实例变量,属于对象实例。^ {CD1}方法与C++和java中的构造函数类似。p>

例1

class C:
    def __init__(self):
        self.mm = []
        self.kk = []
        self.x = 'Y'
        
    def A(self):
        while self.x == "Y":
            self.x=input("do you have any stuff?[Y/N]: ")
            if self.x=="N":
                break
            self.mm.append(input("enter the name of the thing: "))
            self.kk.append(input("Enter the value of the thing: "))
            
    def printing(self):
        print("="*100)
        print("stuff")
        for i in range(0,len(self.mm)):
            print(self.mm[i]," "*20,self.kk[i])

您还可以在__init__类之外创建变量。实际上,这些变量是静态类变量,因此类的所有实例都可以访问它们。它们可以通过类引用(例如:ClassName.varname)读取,并且可以通过使用类名(Classname.varname= X)开头的任何方法进行设置

它也可以通过self.varname读取,为所有实例生成相同的值。但是,当通过实例引用(如self.varname = X)指定一个值时,将仅为该实例创建一个新的self.varname,从而模糊了类变量

例2:

class C:
    mm = []
    kk = []
    x = 'Y'
        
    def A(self):
        while self.x == "Y":
            self.x=input("do you have any stuff?[Y/N]: ")
            if self.x=="N":
                break
            self.mm.append(input("enter the name of the thing: "))
            self.kk.append(input("Enter the value of the thing: "))
            
    def printing(self):
        print("="*100)
        print("stuff")
        for i in range(0,len(self.mm)):
            print(self.mm[i]," "*20,self.kk[i])
        

  

相关问题 更多 >