猿问

Python:父类实例的子实例类

我是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>>

    B

super #Q3: I thought it would print `A`. WHY NOT?


交互式爱情
浏览 209回答 4
4回答

Helenr

您没有打__init__进来B。使用函数名称只会为您提供该函数对象。括号后__init__()实际执行该功能。super(B, self)返回一个类,而不是一个对象(这很有意义-一个类不具有超实例,它具有一个超类),因此您随后__class__对该类进行调用,这将导致意外的结果。您使用__class__onself是因为它self是该类的实例。class B(A):&nbsp; &nbsp; def __init__(self):&nbsp; &nbsp; &nbsp; &nbsp; super(B, self).__init__()&nbsp; &nbsp; &nbsp; &nbsp; print type(self).__name__&nbsp; &nbsp; &nbsp; &nbsp; print super(B, self).__name__请注意,我使用type()过度访问__class__-使用内置函数比直接访问魔术值更好。它更具可读性,并允许特殊功能。
随时随地看视频慕课网APP

相关分类

Python
我要回答