为什么第一个例子可以正常工作

class Test:
    Name = "Krishna"
t1 = Test()
print(t1.Name)

但第二个例子为什么不行

class Student:
    def __init__(self,name):
        pass  # pass指明这个方法什么也不做
    name = ""
    marks = ""


 # 这个方法的作用是通过字符串中的第一个-作为分隔线,生成Student实例
 # 然后将name和marks从字符串中分别提取出来
@classmethod
def from_string(cls,name):
    temp = False
    for i in name:
        if temp == False:
            if(i!='-'):
                cls.name += i
            else:
                temp=True
        else:
            cls.marks += i


s1 = Student.from_string("Krishna-90")
print(s1.name)

原因是class变量和实例变量的区别

class Student:
    def __init__(self/name):
        self.name = ""
        self.marks = ""


# 但是注意实例方法不是通过类名调用的,而是通过实例对象调用的
def from_string(self,name):
    temp = False
    for i in name:
        if temp == False:
            if(i!='-'):
                self.name += i
            else:
                temp=True
        else:
            self.marks += i


s1 = Student()
s1.from_string("Krishna-90")
print(s1.name)