【问题标题】:How can I use multiple inheritance in case of manipulating variable value在操作变量值的情况下如何使用多重继承
【发布时间】:2021-11-08 11:27:36
【问题描述】:
class Electronicdevice():
    Devices = 100
class Pocketgadgets(Electronicdevice):
    Pocketdevices = 40
class Phone(Pocketgadgets):
    #Phones = Devices - Pocketdevices
    pass

Samsung = Electronicdevice()
Galaxy = Pocketgadgets()
SamsungGalaxyS21 = Phone()

print(SamsungGalaxyS21.Devices)

在这种情况下,我得到预期的输出为 100,因为它继承了电子设备类的值。

但万一,我尝试执行以下操作,我收到错误“NameError: name 'Devices' is not defined”

class Electronicdevice():
    Devices = 100
class Pocketgadgets(Electronicdevice):
    Pocketdevices = 40
class Phone(Pocketgadgets):
    Phones = Devices - Pocketdevices
    pass

Samsung = Electronicdevice()
Galaxy = Pocketgadgets()
SamsungGalaxyS21 = Phone()

print(SamsungGalaxyS21.Phones)

期望得到值 60 作为输出。有人可以帮忙吗?

【问题讨论】:

  • Devices不在Phone的范围内,您必须使用Electronicdevice.Devices(或PocketGadgets.Devices

标签: python oop inheritance


【解决方案1】:

您可以尝试以下解决方案:

解决方案 1: 通过class访问variables

class Electronicdevice:
    Devices = 100


class Pocketgadgets(Electronicdevice):
    Pocketdevices = 40


class Phone(Pocketgadgets):
    Phones = Electronicdevice.Devices - Pocketgadgets.Pocketdevices


Samsung = Electronicdevice()
Galaxy = Pocketgadgets()
SamsungGalaxyS21 = Phone()

print(SamsungGalaxyS21.Phones)
60

NB: this example is independent of the inheritance, that is, even if you don't inherit from **Pocketgadgets** class, it will still work.

解决方案 2: 通过classinstance 访问variables

class Electronicdevice:
    Devices = 100


class Pocketgadgets(Electronicdevice):
    Pocketdevices = 40


class Phone(Pocketgadgets):

    def __init__(self):
        self.Phones = self.Devices - self.Pocketdevices


Samsung = Electronicdevice()
Galaxy = Pocketgadgets()
SamsungGalaxyS21 = Phone()

print(SamsungGalaxyS21.Phones)
60

【讨论】:

  • 感谢您回答我的问题。但是继承不会增加变量的范围吗? @丹尼尔
  • 是的,它增加了范围,但class variables 绑定到class,并且只能通过classclassinstance 访问。 NB: with the first example, it is independent of the inheritance, that is, even you don't inherit from **Pocketgadgets** class, it will still work.
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多