【问题标题】:Class with in class in python在 python 中使用类中的类
【发布时间】:2013-04-13 16:46:23
【问题描述】:

我有一个 classex.py 文件:

class Class1:
    def method1():
        print 'stack1'
    def method2():
        print 'over1'
    def method3():
        print 'flow1'

class Class2:
    def method1():
        print 'stack2'
    def method2():
        print 'over2'
    def method3():
        print 'flow2'

class Class3:
    def method1():
        print 'stack3'
    def method2():
        print 'over3'
    def method3():
        print 'flow3'

我想访问classex 文件类,所以我将导入该文件如何在各种类中访问。

例如:

import classex
print Class1.method1()
print Class2.method2()

我的预期输出是 stack1over2

【问题讨论】:

  • 你需要阅读 Python 教程。
  • 因为这不是 python 3,你应该使用class SomeClass(object): 来使用新式类

标签: python python-2.7


【解决方案1】:

或者你可以这样做

class Class1:
    @classmethod
    def method1(clss):
        print 'stack1'
    @classmethod
    def method2(clss):
        print 'over1'
    @classmethod
    def method3(clss):
        print 'flow1'

class Class2:
    @classmethod
    def method1(clss):
        print 'stack2'
    @classmethod
    def method2(clss):
        print 'over2'
    @classmethod
    def method3(clss):
        print 'flow2'

class Class3:
    @classmethod
    def method1(clss):
        print 'stack3'
    @classmethod
    def method2(clss):
        print 'over3'
    @classmethod
    def method3(clss):
        print 'flow3'

然后

import classex

classex.Class1.method2()

等等

但是你所做的并不真正让我觉得你很好地理解了 OOP 原则,或者你来自另一种 OOP 语言,它有一些类方法之王,你希望得到同样的结果。 OO 的 Python 实现与 Java 或 C# 等略有不同,因此请务必阅读一些关于 Python 中方法定义的内容。

【讨论】:

  • 是的,但由于它实际上不是关键字,只是名称,因此问题根本不重要。奇怪的是他们没有强制使用“self”和“cls”作为关键字。
  • 不确定我是否会将 PEP8 描述为“一点也不重要”...这不是必需的,但遵循它是一个非常好的主意。
【解决方案2】:

您实际上并没有导入类本身,而只是导入了模块。

import classex

为了访问你必须做的课程:

>>> myclass = classex.Class1()
>>> myclass2 = classex.Class2()
>>> myclass.method1()
stack1
>>> mycalss2.Class2.method2()
over2

或者直接导入类:

>>> from classex import Class1, Class2
>>> myclass = Class1()
>>> myclass2 = Class2()
>>> myclass.method1()
stack1
>>> myclass2.method2()
over2

【讨论】:

    【解决方案3】:
    class Class1:
        def method1(self): # instance  is passed implicity as first arg
            print 'stack1'
        def method2(self):
            print 'over1'
        def method3(self):
            print 'flow1'
    
    class Class2:
        def method1(self):
            print 'stack2'
        def method2(self):
            print 'over2'
        def method3(self):
            print 'flow2'
    
    class Class3:
        def method1(self):
            print 'stack3'
        def method2(self):
            print 'over3'
        def method3(self):
            print 'flow3'
    

    >>> import classex
    >>> c = classex.Class1() # instance of Class1
    >>> c.method1()
    stack1
    

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 2015-07-23
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多