这可能吗?

问题描述:

我有一个Foo类,它是一个正在运行的线程,我想要做的是限制有多少Bar可以访问Foo,同时仍然可以访问Foo的内部,这可能吗?这可能吗?

+2

你的问题还不清楚。你问是否有可能创建一个对象的新实例? – Crashworks 2009-11-06 08:30:16

+1

Alex Martelli的答案在http://*.com/questions/1547145/defining-private-module-functions-in-python对这个问题是一个很好的答案。 – 2009-11-06 09:10:58

+1

看到下面的答案,下次你应该从一开始就明确地提出问题,而不是完全改变它,这是最困惑和浪费时间为其他人正在尝试帮助。 – RedGlyph 2009-11-06 10:27:28

Python是强烈,动态键入语言。这意味着:

  • 对象是类型,这意味着一个整数是一个整数,除非你这么说不能被当作别的。对象具有特定类型并保持这种状态。
  • 您可以使用名称(变量)来引用对象,但该名称没有任何特定的类型。这一切都取决于名称是指什么,这可以改变,因为其他的东西被分配到相同的名称。

Python强烈使用所谓的"duck typing"技术,其中对象没有(也不需要)特定类型的接口。如果一个对象支持一组特定的方法(规范示例是一个类文件对象),那么它可以用于期望文件类对象的上下文中。

+0

我不得不看到原来的问题,以了解它是如何相关的,对不起,OP改变它如此显着... – RedGlyph 2009-11-06 10:23:33

根据你的问题,它看起来你想要一个可能像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