我正在编写一些代码并且有关于python
的一般性问题如果我有这样的话:
class A():
def __init__(self):
self.name
...
def doSomething(self):
class B():
def __init__(self):
self.name
...
c = B()
c.whatever()
这是否意味着B类仅对该函数是私有的,还是可以从A类的实例调用它?如果我有这样的代码,请注意:
class A():
class B():
def __init__(self):
self.name
def __init__(self):
self.name
...
def doSomething(self):
...
我可以通过这样做d = A.B()
来调用它吗?
答案 0 :(得分:1)
要意识到的是class
语句只是创建一个值为类的变量。结果类的作用域的工作方式与变量的作用域的工作方式相同,如果您只是执行了x = 2
这样的常规变量赋值。
除非另行指定,否则在函数内创建的任何变量都是该函数的本地变量。因此,在函数内部使用class
语句只会创建一个值为类的局部变量。无法从函数外部访问它。
换句话说,这个:
def foo():
class A(object):
pass
与此没有什么不同:
def foo():
A = 2
在这两种情况下,您都会在函数内部创建一个局部变量A.在一种情况下,它的值是一个类,而在另一种情况下,它的值是一个整数,但在这两种情况下它都是一个局部变量,并且在函数外部不存在。
在第二个示例中,类是在封闭类中创建的。在类名称空间内创建的变量是类属性,所以是的,您可以在描述时访问它。 (为什么你想这样做是另一个问题。)换句话说,如上所述:
class A(object):
class B(object):
pass
与此没有什么不同:
class A(object):
B = 2
在这两种情况下,您都会创建一个具有类属性B的类A.