【发布时间】:2018-01-08 04:14:26
【问题描述】:
这是 A Byte of Python 中的一个示例。这是关于继承的。
但是当我删除 (SchoolMember) 时,一切正常,结果没有改变。那么,继承有什么用。使用继承和不使用继承有什么区别。
class SchoolMember:
def __init__(self, name, age):
self.name = name
self.age = age
print('(Initialized SchoolMember: {})'.format(self.name))
def tell(self):
print('Name:"{}" Age:"{}"'.format(self.name, self.age), end=" ")
class Teacher(SchoolMember):
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print('(Initialized Teacher: {})'.format(self.name))
def tell(self):
SchoolMember.tell(self)
print('Salary: "{:d}"'.format(self.salary))
class Student(SchoolMember):
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print('(Initialized Student: {})'.format(self.name))
def tell(self):
SchoolMember.tell(self)
print('Marks: "{:d}"'.format(self.marks))
t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)
print()
members = [t, s]
for member in members:
# Works for both Teachers and Students
member.tell()
【问题讨论】:
-
您可能只是没有删除继承,而是做了一些更改,请将您所做的更改添加到您的问题中。
-
我没有更改任何其他内容。但我在想,因为每个类都有一个tell方法,所以去掉interiance是可以的,因为它没有被使用。
-
您是否仍在定义
SchoolMember的解释器会话中?如果是这样,这两个子类仍然保留对它的引用,所以它还没有被删除,它不再可用于您的解释器会话。 -
您的子类没有定义
self.name,因此删除SchoolMember将不起作用。您应该尝试更好地了解继承的好处。有了继承,你就不需要在每个类中定义tell -
是的,我认为 user1767754 是对的,我现在更了解继承,感谢您的所有帮助。
标签: python python-3.x oop inheritance python-internals