【问题标题】:Python inherit the property of one class to anotherPython将一个类的属性继承给另一个
【发布时间】:2018-05-05 20:21:05
【问题描述】:

我有三个不同的类和一些变量

class A(object):
    a = "Hello"
    b = "World"

class B(object):
    a = "Hello"
    b = "World"

class C(object):
    a = "Hello"
    b = "World"

a = "Hello"b = "World" 对所有类都是通用的,我如何将这些变量声明为全局类并将属性继承到这些表。

我尝试过这种方式,但无法得到解决方案。

class G(object):
    a = "Hello"
    b = "World"

class A(object, G):
    pass

这里我试图继承类的全部属性。请帮我提前解决这个问题。

【问题讨论】:

  • 你所做的有什么问题?
  • G 已经是一个对象
  • 您可以考虑完全不使用继承(并引入额外的G 类),而只是将两个变量设为全局变量。

标签: python class inheritance


【解决方案1】:
class A(object):
    a = "Hello"
    b = "World"

class B(A):
  something

class C(B):
  something

c = C()
print(c.a,c.b)

您不必每次都重新声明 a 和 b ,否则您为什么要首先继承。如果你声明它们,你基本上是用孩子的变量覆盖父变量。如果你这样做,你可以用 super() 调用父母的。

【讨论】:

  • 您的示例类似于 Abhijeetk431 答案,非常感谢。
  • 是的,但请注意您不必重新声明 a 和 b!欢迎您!
【解决方案2】:

这就是你的做法。如果有不明白的地方,或者我做错了什么,请在 cmets 中告知。

class A(object):
    a = "Hello"
    b = "World"

class B(A):
    pass

class C(B):
    pass

c = C()
print(c.a,c.b)

打印 Hello World

【讨论】:

  • 谢谢@Abhijeet,我从你的回答中得到了解决方案,非常感谢
  • 不需要用相同的值再次声明 a 和 b。你已经继承了它们!如果您想为每个类存储新值但仍然可以使用 super() 调用父类的值,则唯一的理由是再次声明
  • 这个答案很有误导性。这是如何进行继承的一个糟糕示例。
  • 编辑了答案。很抱歉再次声明变量。这是我打算做的,但删除额外的声明从我的脑海中溜走。
【解决方案3】:

定义类A为:

class A(G):
    pass

重复基类object 的问题在于它会产生基类解析冲突,因为A 两次继承它:一次直接继承,一次通过类G 间接继承。

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2017-01-16
    • 2014-04-14
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多