调用在python的另一个类中声明的类

2024-04-24 19:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学Python。我想知道如何在另一个类中使用一个类来执行这样的操作:

class wardrove:
    class drawer1:
        def __init__(self):
            self.sokcs='red'
    class drawer2:
        def __init__(self):
            self.hats='black'

    def __init__(self):
        self.drawer1()
        self.drawer2()
        self.shirts='white'

wardrove_lane=[]
for i in range(0,2):
    wardrove_lane.append(wardrove())


wardrove_lane[1].drawer1.sokcs='green'
wardrove_lane[0].drawer1.sokcs='blue'

print(wardrove_lane[1].drawer1.sokcs)
print(wardrove_lane[0].drawer1.sokcs)  

在这个例子中,我得到:

blue

blue

但我希望:

green

blue

谢谢


Tags: selfinitdefgreenblueredclassblack
2条回答

您需要用两个新变量实例化构造函数,方法如下:

class wardrove:
   class drawer1:
       def __init__(self):
           self.sokcs='red'
   class drawer2:
       def __init__(self):
           self.hats='black'

   def __init__(self):
       self.d1 = self.drawer1()
       self.d2 = self.drawer2()
       self.shirts='white'

wardrove_lane=[]
for i in range(0,2):
    wardrove_lane.append(wardrove())


wardrove_lane[1].d1.sokcs='green'
wardrove_lane[0].d1.sokcs='blue'

print(wardrove_lane[1].d1.sokcs)
print(wardrove_lane[0].d1.sokcs) 

您需要将self.drawer1()self.drawer2()分配给不同的实例,例如self.d1self.d2

class wardrove:
   def __init__(self):
       self.d1 = self.drawer1()
       self.d2 = self.drawer2()
       self.shirts='white'
   class drawer1:
      def __init__(self):
         self.sokcs='red'
   class drawer2:
      def __init__(self):
         self.hats='black'


wardrove_lane=[]
for i in range(0,2):
   wardrove_lane.append(wardrove())


wardrove_lane[1].d1.sokcs='green'
wardrove_lane[0].d2.sokcs='blue'
print(wardrove_lane[1].d1.sokcs)
print(wardrove_lane[0].d2.sokcs)

输出:

green
blue

但是,如果确实希望按类实例访问属性,则可以使用classmethod包装器稍微重新构造代码:

class wardrove:
   def __init__(self):
       self.d1 = self.drawer1()
       self.d2 = self.drawer2()
       self.shirts='white'
   class drawer1:
      sokcs='red'
      @classmethod
      def update(cls, value):
          cls.sokcs = value
   class drawer2:
      hats='black'
      @classmethod
      def update(cls, value):
         cls.hats = value

wardrove_lane=[]
for i in range(0,2):
   wardrove_lane.append(wardrove())

wardrove_lane[1].drawer1.update('green')
wardrove_lane[0].drawer2.update('blue')

相关问题 更多 >