2013-04-20 46 views
0

類我有一個classex.py文件:類與Python中

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

+3

您需要閱讀Python教程。 – delnan 2013-04-20 10:09:10

+0

由於這不是python 3,所以你應該使用'class SomeClass(object):'使用新式的類 – Eric 2013-04-20 10:23:28

回答

5
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 
+0

**謝謝........ ** – 2013-04-20 10:13:41

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 
0

或者你也可以做到這一點

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原則 - 方法,你會得到相同的結果。 面向對象的Python實現與Java或C#等稍有不同,所以請務必閱讀一些關於如何在Python中定義方法的內容。

+0

[PEP8說你應該使用'cls '不'clss'](http://stackoverflow.com/a/4795306/102441) – Eric 2013-04-20 10:24:10

+0

是真實的,但由於它實際上並不是一個關鍵字,只是一個名字,這個問題根本就不重要。奇怪的是,他們並沒有將「self」和「cls」強制作爲關鍵字。 – 2013-04-20 20:52:35

+0

不確定我會將PEP8描述爲「根本不重要」......這不是必需條件,但是遵循它是一個非常好的主意。 – Eric 2013-04-20 21:48:09