【问题标题】:Python Inheritance, delete inheritance, but result didn't changePython继承,删除继承,但结果没有改变
【发布时间】: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


【解决方案1】:

当我删除(SchoolMember)时,一切正常,结果没有 改变。

仅删除 SchoolMember 会删除变量名称。 TeacherStudent 类仍然在它们的 _bases_ 属性中引用原始类。

试试这个:

del SchoolMember.__init__
del SchoolMember.tell

这将通过删除继承的方法来清空父类。

那么,继承有什么用

继承的目的是代码重用。在您的示例中,它允许 SchoolMember 中的代码用于另外两个类,TeacherStudent

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2014-10-12
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多