我确实碰到了这个棘手的问题,不过我解决了。这个问题在一些python高手或是有经验的人来说,可能真不算是个问题,但是对于我这样子的初学者来说,着实难到了。
下面贴上代码
class SchoolMember(object): def __init__(self,name): self.name = name print "new a SchoolMember:%s" % self.name def tell(self): print "SchoolMember:%s" % self.name class Teacher(SchoolMember): def __init__(self,name,salary): super(Teacher,self).__init__(name) self.salary = salary print "new a Teacher:%s,salary:%d" % (self.name,self.salary) def tell(self): print "Teacher:%s,salary:%d" % (self.name,self.salary) class Student(SchoolMember): def __init__(self,name,score): super(Student,self).__init__(name) self.score = score print "new a Student:%s,score:%d" % (self.name,self.score) def tell(self): print "Student:%s,score:%d" % (self.name,self.score) schoolMem = SchoolMember("Lily") schoolMem.tell() schoolMem = Teacher("LiLei",3000) schoolMem.tell() schoolMem = Student("HanMei",98) schoolMem.tell()
class SchoolMember(object): def __init__(self, name): self.name = name print "new SchoolMember:%s" % self.name def tell(self): print "School member:%s" % self.name
import SchoolMember class Teacher(SchoolMember): def __init__(self, name, salary): super(Teacher, self).__init__(name) self.salary = salary def tell(self): print "teacher:%s,salary:%d" % (self.name, self.salary) t = Teacher("Lily", 3000) t.tell()
import SchoolMember class Student(SchoolMember): def __init__(self, name, score): super(Student, self).__init__(name) self.score = score def tell(self): print "student:%s,score:%d" % (self.name, self.score)
import Teacher import Student teacher1 = Teacher("LiLei", 3000) stu1 = Student("Lily", 98) teacher1.tell() stu1.tell()
Error when calling the metaclass bases
module.__init__() takes at most x arguments (x+1 given)
错在SchoolMember为模块名,而继承类希望是类名,此时应该在class语句中的SchoolMember后加上.SchoolMember,即
class Teacher(SchoolMember.SchoolMember)
class Student(SchoolMember.SchoolMemeber)