gpt4 book ai didi

Python:父类实例的子实例类

转载 作者:太空宇宙 更新时间:2023-11-04 10:46:11 24 4
gpt4 key购买 nike

我是 OOPS 的新手

我想知道什么时候父类实例P初始化,我想初始化子类实例C

喜欢

class A(object):
def __init__(self):
print "A created"
P = A()


class B(A):
def __init__(self):
print super((B), self).__init__ # Q1: How to get "A created" from parent class?
print self.__class__.__name__
print super(B, self).__class__.__name__

Q2:现在如果我创建一个实例 z = B(),我想创建 z 作为 P 的子实例即 z 只应在较早的实例 P 存在时创建。并且 P 的属性应该向下流到 z w/数据(如果有的话)添加到属性。如果 P 不存在,则基本上不应创建 z

类似地 y = B() 当且仅当 x = A()有办法吗?

我这样做是因为我正在创建一个程序,其中将在各种上下文中创建类 A 的多个实例,比如

Mathematics = A()
English = A()
Now,
Algebra = B() iff Mathematics = A()
And
Grammar = B() iff English = A()

有自助检查器可以检查吗?我的意思是这是怎么做到的?

Q2 更新: 另一种询问方式是,是否有一种方法可以在创建实例时检查 B 类以检查 A 类的实例并获取特定实例数据?就像在 B 类中检查由 A 类构成的实例,然后选择一个实例并将数据从该实例的属性获取到正在创建的 B 类实例??

还有

 z = B()
<bound method B.__init__ of <__main__.B object at 0x000000000791DB38>>
B
super #Q3: I thought it would print `A`. WHY NOT?

最佳答案

您没有在 B 中调用 __init__。使用函数的名称只会为您提供该函数对象。 __init__() 后面的括号实际执行函数。

super(B, self) 返回一个类,而不是一个对象(这是有道理的 - 一个类没有超实例,它有一个父类(super class)),所以你然后调用 __class__ 在那个类上,这会导致意外的结果。您在 self 上使用 __class__ 因为 self 是该类的一个实例。

class B(A):
def __init__(self):
super(B, self).__init__()
print type(self).__name__
print super(B, self).__name__

请注意我使用 type() 而不是访问 __class__ - 使用内置函数比直接访问魔法值要好。它更具可读性,并允许使用特殊功能。

关于Python:父类实例的子实例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com