2009-11-06 102 views
-5

我有一個Foo類,它是一個正在運行的線程,我想要做的是限制有多少Bar可以訪問Foo,同時仍然可以訪問Foo的內部,這可能嗎?這可能嗎?

+2

你的問題還不清楚。你問是否有可能創建一個對象的新實例? – Crashworks 2009-11-06 08:30:16

+1

Alex Martelli的答案在http://stackoverflow.com/questions/1547145/defining-private-module-functions-in-python對這個問題是一個很好的答案。 – 2009-11-06 09:10:58

+1

看到下面的答案,下次你應該從一開始就明確地提出問題,而不是完全改變它,這是最困惑和浪費時間爲其他人正在嘗試幫助。 – RedGlyph 2009-11-06 10:27:28

回答

2

Python是強烈,動態鍵入語言。這意味着:

  • 對象是類型,這意味着一個整數是一個整數,除非你這麼說不能被當作別的。對象具有特定類型並保持這種狀態。
  • 您可以使用名稱(變量)來引用對象,但該名稱沒有任何特定的類型。這一切都取決於名稱是指什麼,這可以改變,因爲其他的東西被分配到相同的名稱。

Python強烈使用所謂的"duck typing"技術,其中對象沒有(也不需要)特定類型的接口。如果一個對象支持一組特定的方法(規範示例是一個類文件對象),那麼它可以用於期望文件類對象的上下文中。

+0

我不得不看到原來的問題,以瞭解它是如何相關的,對不起,OP改變它如此顯着... – RedGlyph 2009-11-06 10:23:33

0

根據你的問題,它看起來你想要一個可能像Foo一樣的IFoo實例。下面的代碼可以做到這一點,但不建議在Python中這樣做。

class IFoo(object): pass 
class Foo(IFoo): pass 

f = IFoo() 
Foo.__init__(f) 

更好的方法是簡單地使用(多)繼承:

class IFoo(object): 
    def __init__(self, *args, **kwargs): 
     pass 

class Foo(IFoo): 
    def __init__(self, *args, **kwargs): 
     IFoo.__init__(self, *args, **kwargs) 

f = Foo() 
+0

這段代碼是針對你以前版本的問題:__IFoo f = new Foo(); __ – mtasic85 2009-11-06 09:07:34