我确实碰到了这个棘手的问题,不过我解决了。这个问题在一些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()
分别执行以上4段代码,发现除了第1代码段,其余全错,错误:
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)