继承与类

2024-10-06 07:53:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这在我的班级档案里。在

class Edifice:
    def __init__(self,storeys,area):
        self.__storeys = storeys
        self.__area = area

    def show_info(self):
        print('Storeys:',self.__storeys,', floor area:',self.__area)

class Home(Edifice):
    def __init__(self, storeys, area, bedrooms):
        super().__init__(storeys, area)
        self.__bedrooms = bedrooms

    def show_info(self):
        super(Home, self).show_info()
        print("For human habitation: ", self.__bedrooms, "bedrooms")

在我的可执行文件中:

^{pr2}$

从可执行文件中,我需要创建另一个Home show_info()方法的实例,该方法具有不同的文本输出。在


Tags: 方法selfinfo可执行文件homeinitdefshow
2条回答

您需要使用类似于:

class Home(Edifice):
    def __init__(self, storeys, area, bedrooms):
        super().__init__(storeys, area)
        self.__bedrooms = bedrooms
        super(Home, self).show_info()
        print("For human habitation: ", bedrooms, "bedrooms")

h = Home(2,3000,3)
Storeys: 2 , floor area: 3000
For human habitation:  3 bedrooms

要实际重写该方法,使用super调用父级方法非常简单:

^{pr2}$

如果使用python2,语法略有不同,还应继承from object以支持新的样式类:

class Edifice(object):
    def __init__(self,storeys,area):
        self.__storeys = storeys
        self.__area = area

    def show_info(self):
        print('Storeys:{}, floor area: {}'.format(self.__storeys,self.__area))

class Home(Edifice):
    def __init__(self, storeys, area, bedrooms):
        super(Home, self).__init__(storeys, area)
        self.__bedrooms = bedrooms

    def show_info(self):
        super(Home, self).show_info()
        print("For human habitation: {} bedrooms.".format(self.__bedrooms)

h = Home(2,3000,3)
h.show_info()

不确定您所说的可执行文件是什么意思,但您可以在文件中使用if __name__==__main__,并且只有在运行该文件时才会执行代码:

if __name__=="__main__":
    h = Home(3,3000,2)
    h.show_info()

如果您只想导入并运行另一个.py文件中的代码:

from whatever import Home
h = Home(3,3000,2)
h.show_info()

无论哪个模块都必须在同一个目录中或在您的PYTHONPATH中,有几种不同的方法可以添加到您的路径中,本文讨论了question.

对于您的编辑,我将使消息成为一个属性,并在第二个实例中更改它:

class Home(Edifice):
    def __init__(self, storeys, area, bedrooms):
        super().__init__(storeys, area)
        self.__bedrooms = bedrooms
        self.message = "For human habitation: {} bedrooms"

    def show_info(self):
        super(Home, self).show_info()
        print("{}".format(self.message.format(self.__bedrooms)))

然后:

from module import Home


h = Home(3, 3000, 2)
h.show_info()

h2 = Home(2, 4000, 5)
h2.message = "Second Human habitation: {} bedrooms"

h2.show_info()

输出:

Storeys: 3 , floor area: 3000
For human habitation: 2 bedrooms
Storeys: 2 , floor area: 4000
Second Human habitation: 5 bedrooms

无需损坏,它就简单得多:

class Home(Edifice):
    def __init__(self, storeys, area, bedrooms):
        super().__init__(storeys, area)
        self.bedrooms = bedrooms
        self.message = "For human habitation: {} bedrooms".format(self.bedrooms)

    def show_info(self):
        super(Home, self).show_info()
        print(self.message)

我们只需设置实例中的全部消息:

from module import Home


h = Home(3, 3000, 2)
h.show_info()

h2 = Home(2, 4000, 5)
h2.message = "Second Human habitation: {} bedrooms".format(h2.bedrooms)

h2.show_info()

你已经很接近了。这里的主要内容是记住在父类上调用show_info,然后在重写show_info声明的同时添加您的信息。在

我假设您使用的是python3,因此下面是python3语法。这也适用于python2;请记住,父类将打印元组而不是字符串,除非导入print_function,如from __future__ import print_function。在

class Home(Edifice):
    def __init__(self, storeys, area, bedrooms):
        Edifice.__init__(self, storeys, area)
        self.__bedrooms = bedrooms

    def show_info(self):
        Edifice.show_info(self)
        print('For human habitation: {} bedrooms'.format(self.__bedrooms))

相关问题 更多 >