我是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__问题2:现在,如果我创建一个实例z = B(),我想创建z为Pie的子实例,z仅当P存在较早的实例时才应创建。如果将任何属性添加到属性,则的属性P应向下流动到zw /数据。z如果P不存在,基本上不应该创建同样y = B() iff x = A() 有办法吗?我这样做是因为我正在创建一个程序,其中将A在各种上下文中创建Class的多个实例。Mathematics = A()English = A()Now,Algebra = B() iff Mathematics = A()And Grammar = B() iff English = A()是否有自我检查器进行检查?我的意思是怎么做到的?关于Q2的更新: 另一种询问方式是,在创建实例以检查A类的实例并获取特定的实例数据时,是否有方法可以检入B类?就像在B类中一样,检查由A类构成的实例,然后选择一个实例,并从该实例的属性中获取数据,以获取要创建的B类实例?还 z = B() <bound method B.__init__ of <__main__.B object at 0x000000000791DB38>> Bsuper #Q3: I thought it would print `A`. WHY NOT?
4 回答
Helenr
TA贡献1780条经验 获得超4个赞
您没有打__init__进来B。使用函数名称只会为您提供该函数对象。括号后__init__()实际执行该功能。
super(B, self)返回一个类,而不是一个对象(这很有意义-一个类不具有超实例,它具有一个超类),因此您随后__class__对该类进行调用,这将导致意外的结果。您使用__class__onself是因为它self是该类的实例。
class B(A):
def __init__(self):
super(B, self).__init__()
print type(self).__name__
print super(B, self).__name__
请注意,我使用type()过度访问__class__-使用内置函数比直接访问魔术值更好。它更具可读性,并允许特殊功能。
添加回答
举报
0/150
提交
取消