【问题标题】:Accessing class methods inside another class at same scope在同一范围内访问另一个类中的类方法
【发布时间】:2015-10-03 09:08:43
【问题描述】:

试图在一个类中访问另一个类中的类方法。下面的代码可能会解释我的目标。

class Access(object):

    def __init__(self):
        pass

    def select(self, value):
        Store.keep(value)

class Store(object):

    def __init__(self):
        self.store_value = 0

    def keep(self, value):
        self.store_value = value

x = Access()
y = Store()

x.select(10)

y.store_value
##Want the output of 10

【问题讨论】:

  • 这不可能。 A 如何知道将值放入哪个 Store 实例?也许你应该展示你的实际用例。
  • 是的。如果您想为多个类提供一种方法,您可以建模一个超类(继承),它可以将该方法分发给它的子类。或者也许你想要一个抽象类。这取决于您的需求。

标签: python class


【解决方案1】:

如果 Access 没有对 Store 对象的引用,我看不出有任何方法可以做你想做的事。

你能做的最接近的事情是

class Access(object):

    def __init__(self):
        pass

    def select(self, value):
        Store.keep(value)

class Store(object):

    @classmethod
    def keep(cls, value):
        cls.store_value = value

x = Access()
y = Store()

x.select(10)

print y.store_value #will print 10 

#but

z = Store()

print z.store_value #will print 10 too

其中 store_value 由 Store 的所有实例共享。

【讨论】:

    【解决方案2】:

    您也可以将实例传递给select 并使用Store.keep(inst, value)

    class Access(object):
    
        def __init__(self):
            pass
    
        def select(self, inst, value):
            Store.keep(inst, value)
    
    class Store(object):
    
        def __init__(self):
            self.store_value = 0
    
        def keep(self, value):
            self.store_value = value
    
    x = Access()
    y = Store()
    
    x.select(y, 10)
    
    print(y.store_value) 
    10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 2013-12-27
      • 1970-01-01
      相关资源
      最近更新 更多