Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:父类实例的子实例类_Python_Class_Oop_Python 2.7 - Fatal编程技术网

Python:父类实例的子实例类

Python:父类实例的子实例类,python,class,oop,python-2.7,Python,Class,Oop,Python 2.7,我是新手 我想知道父类实例p何时初始化,子类实例C何时初始化 像 问题2:现在,如果我创建一个实例z=B,我想将z创建为p的子实例,也就是说,只有在较早的实例p存在的情况下,才应该创建z。 P的属性应该向下流到z/如果有数据添加到属性中。 如果P不存在,则基本上不应创建z 类似地,当x=A时,y=B 有办法吗 我这样做是因为我正在创建一个程序,在这个程序中,可以在不同的上下文中创建类a的多个实例,比如 Mathematics = A() English = A() Now, Algebra =

我是新手

我想知道父类实例p何时初始化,子类实例C何时初始化

问题2:现在,如果我创建一个实例z=B,我想将z创建为p的子实例,也就是说,只有在较早的实例p存在的情况下,才应该创建z。 P的属性应该向下流到z/如果有数据添加到属性中。 如果P不存在,则基本上不应创建z

类似地,当x=A时,y=B 有办法吗

我这样做是因为我正在创建一个程序,在这个程序中,可以在不同的上下文中创建类a的多个实例,比如

Mathematics = A()
English = A()
Now,
Algebra = B() iff Mathematics = A()
And 
Grammar = B() iff English = A()
是否有自检程序来检查?我是说那是怎么做到的

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

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

超级,self返回一个类,而不是一个有意义的对象-一个类没有superinstance,它有一个超类,所以你在这个类上调用_class_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在self上使用_类,因为self是类的实例

class B(A):
    def __init__(self):
        super(B, self).__init__()
        print type(self).__name__
        print super(B, self).__name__
请注意,我使用类型over accessing __类_;-使用内置函数比直接访问magic值要好。它更具可读性,并允许使用特殊功能。

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

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

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

b = B()


--output:--
A created
超级,self返回一个类,而不是一个有意义的对象-一个类没有superinstance,它有一个超类,所以你在这个类上调用_class_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在self上使用_类,因为self是类的实例

class B(A):
    def __init__(self):
        super(B, self).__init__()
        print type(self).__name__
        print super(B, self).__name__
请注意,我使用类型over accessing __类_;-使用内置函数比直接访问magic值要好。它更具可读性,并允许特殊功能

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

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

b = B()


--output:--
A created
我想将z创建为p的子实例,即z应仅为 如果存在早期实例P,则创建。以及P的属性 如果属性中添加了任何数据,则应向下流至z

1为什么你把z称为p的“子实例”?你说将z作为“子实例”等同于仅当P的实例存在时才创建z。为什么呢这种“子实例”语言来自哪里?如果20已经存在,你是否也说整数10是20的“子实例”

2p不是一个类,因此p的任何属性都不会在任何地方流动

更新2

class A(object):
    def __init__(self, name):
        self.name = name

class B(A):
    def __init__(self, anA, age):
        super(B, self).__init__(anA.name)
        self.age = age



existingA = {}
a = A("Sally")
existingA["Sally"] = a
a = A("George")
existingA["George"] = a


x = "Sally"
if x in existingA:
    b = B(existingA[x], 30) 
    print b.name, b.age


--output:--
Sally 30
我想将z创建为p的子实例,即z应仅为 如果存在早期实例P,则创建。以及P的属性 如果属性中添加了任何数据,则应向下流至z

1为什么你把z称为p的“子实例”?你说将z作为“子实例”等同于仅当P的实例存在时才创建z。为什么呢这种“子实例”语言来自哪里?如果20已经存在,你是否也说整数10是20的“子实例”

2p不是一个类,因此p的任何属性都不会在任何地方流动

更新2

class A(object):
    def __init__(self, name):
        self.name = name

class B(A):
    def __init__(self, anA, age):
        super(B, self).__init__(anA.name)
        self.age = age



existingA = {}
a = A("Sally")
existingA["Sally"] = a
a = A("George")
existingA["George"] = a


x = "Sally"
if x in existingA:
    b = B(existingA[x], 30) 
    print b.name, b.age


--output:--
Sally 30

通过阅读更新后的第2季度和第1季度,听起来你对课程以及它们能为你做什么有一个基本的误解。这是有道理的,因为你说你是OOP新手

除非我知道您熟悉哪些非OOP语言,否则我将在这里与术语相冲突,但我将使用C示例,故意掩盖一系列问题,并声称您的类a类似于结构a,而您的类B只是一个包含整个结构a的结构B:

如果你创建了一个B的新实例,你不能改变它的a成员的类型,它总是一个实际的a。不管是否有结构A2类型或实例,B的内容只包括一个a

听起来你想要的根本不是一个子类,而只是一个普通的成员,在C中,它更像是一个指向其他对象的指针,而不是将其合并到一起:

class A1(object):
    def __init__(self):
        pass
    def about(self):
        print 'I am an A1'

class A2(object):
    def __init__(self):
        pass
    def about(self):
        print 'I am an A2'

class B(object):
    def __init__(self, connected_to = None):
        self.connected_to = connected_to
    def about(self):
         print 'I am a B'
         if self.connected_to is not None:
             print '... and I am connected to a %s:' % type(self.connected_to)
             self.connected_to.about() # and ask it to describe itself
         else:
             print '... and I am connected to no one!'
在C中,至少有一个指针,如果它是void*-意味着你可以指向你需要的任何类型,或者什么都不指向,就像上面的a B可以连接到None,而不是A1或A2,或者任何东西,只要它有

鉴于上述情况,您可以执行以下操作:

>>> B(A1()).about()
I am a B
... and I am connected to a <class '__main__.A1'>:
I am an A1
>>> B(A2()).about()
I am a B
... and I am connected to a <class '__main__.A2'>:
I am an A2
>>> B().about()
I am a B
... and I am connected to no one!
>>> 
调用super只会让您获得这种特殊的功能。代理对象是实例如何在技术上向上调用mro;按照Python2中的链接进行操作
文档。

基于阅读更新的第二季度并再次查看第一季度,您似乎对课程以及它们可以为您做什么有一个基本的误解。这是有道理的,因为你说你是OOP新手

除非我知道您熟悉哪些非OOP语言,否则我将在这里与术语相冲突,但我将使用C示例,故意掩盖一系列问题,并声称您的类a类似于结构a,而您的类B只是一个包含整个结构a的结构B:

如果你创建了一个B的新实例,你不能改变它的a成员的类型,它总是一个实际的a。不管是否有结构A2类型或实例,B的内容只包括一个a

听起来你想要的根本不是一个子类,而只是一个普通的成员,在C中,它更像是一个指向其他对象的指针,而不是将其合并到一起:

class A1(object):
    def __init__(self):
        pass
    def about(self):
        print 'I am an A1'

class A2(object):
    def __init__(self):
        pass
    def about(self):
        print 'I am an A2'

class B(object):
    def __init__(self, connected_to = None):
        self.connected_to = connected_to
    def about(self):
         print 'I am a B'
         if self.connected_to is not None:
             print '... and I am connected to a %s:' % type(self.connected_to)
             self.connected_to.about() # and ask it to describe itself
         else:
             print '... and I am connected to no one!'
在C中,至少有一个指针,如果它是void*-意味着你可以指向你需要的任何类型,或者什么都不指向,就像上面的a B可以连接到None,而不是A1或A2,或者任何东西,只要它有

鉴于上述情况,您可以执行以下操作:

>>> B(A1()).about()
I am a B
... and I am connected to a <class '__main__.A1'>:
I am an A1
>>> B(A2()).about()
I am a B
... and I am connected to a <class '__main__.A2'>:
I am an A2
>>> B().about()
I am a B
... and I am connected to no one!
>>> 

调用super只会让您获得这种特殊的功能。代理对象是实例如何在技术上向上调用mro;按照Python2文档中的链接进行操作。

您没有在B中调用uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在这里打印非常好,self.uuuuuuuuuuuuuuu@user2290820是的,uuuu init_uuuuuuuuuu是一个function@user2290820如果我有一个函数测试,并且我用Python进行测试,我只得到那个函数对象。如果我使用参数进行潜在测试,我实际上会调用该函数。@Lattyware请注意属性。x、 如果在测试函数上使用@property装饰器或让test=property。。。在班里。当然,这只意味着人们编写有副作用的getter…你不是在B中调用uuu init_uuu。uuu init_uuu-调用函数需要括号。@Lattyware我不明白。在这里打印非常好,self.uuuuuuuuuuuuuuu@user2290820是的,uuuu init_uuuuuuuuuu是一个function@user2290820如果我有一个函数测试,并且我用Python进行测试,我只得到那个函数对象。如果我使用参数进行潜在测试,我实际上会调用该函数。@Lattyware请注意属性。x、 如果在测试函数上使用@property装饰器或让test=property。。。在班里。当然,这只意味着人们编写具有副作用的getter…从技术上讲,至少在Python 3中,所有类都是元类类型的实例,除非为Python 3中的类声明提供了元类参数metaclass named parameter,_uuu元类uuuuuu在Python 2的类主体中的插槽,在这种情况下,类将是元类的实例。有趣的是,类型本身就是一个实例。@user2290820这是一个新问题,应该在新问题中提出,而不是编辑成这个问题。从技术上讲,至少在Python 3中,所有类都是元类类型的实例,除非为Python 3中的类声明提供了一个元类参数metaclass named parameter,在Python 2的类体中,在这种情况下,类将是元类的实例。有趣的是,类型本身是一个实例。@user2290820这是一个新问题,应该在SO上的新问题中询问,而不是编辑到此问题中。忽略子实例。让我重新措辞。当数学=A时,代数=B。这里是一个新的类,不在上面,它根据数学从用户那里获得某些属性。对于英语,它们可能在意义上有所不同,属性可以被动态更改,但这不是这里的上下文。这意味着我想创建代数=B,但是代数类实例应该有一个机制来检查数学是否存在,就像数学=a一样。另一种说法是,有没有办法检查B类中的一个类的实例是什么?或者实例?忽略子实例。让我重新措辞。当数学=A时,代数=B。这里是一个新的类,不在上面,它根据数学从用户那里获得某些属性。对于英语,它们可能在意义上有所不同,属性可以被动态更改,但这不是这里的上下文。这意味着我想创建代数=B,但是代数类实例应该有一个机制来检查数学是否存在,就像数学=a一样。另一种说法是,有没有办法检查B类中的一个类的实例是什么?或者是实例?是的,这个对象到对象的连接就是我要寻找的。定义类的实例,这些类有子类,但只使用它们实例中的数据。我希望你明白我在这里所说的道理。这个对象对对象的连接就是我所寻找的。例如 具有子类但仅包含来自其实例的数据的类的集合。我希望你明白我在这里的意思