Polymorphism in Python

前端 未结 2 1465
旧时难觅i
旧时难觅i 2021-01-20 20:28
class File(object):
    def __init__(self, filename):
        if os.path.isfile(filename):
            self.filename = filename
            self.file = open(filename         


        
相关标签:
2条回答
  • 2021-01-20 21:01

    Prefixing an attribute with double underscores doesn't make the attribute private, it simply makes polymorphism impossible because the attribute name gets mangled with the current class name. Change it to a single underscore prefix instead.

    0 讨论(0)
  • 2021-01-20 21:15

    You can also leave the method undefined in the base class to achieve the same effect.

    import os
    class File(object):
        def __init__(self, filename):
            if os.path.isfile(filename):
                self.filename = filename
                self.file = open(filename, 'rb')
                self._read()
            else:
                raise Exception('...')
    class FileA(File):
        def _read(self):
            pass
    file = FileA('myfile.a')
    

    It is invaluable to the understanding of Python classes to have this understanding of class inheritance.

    0 讨论(0)
提交回复
热议问题