我是Python的新手,没有找到以下问题的答案:我有两个类,希望他们彼此使用变量。有没有一种简单的方法来做到这一点,因为如果我像这个类A这样的级别,就不知道B类存在。
class a:
y=1
print(b.x)
class b:
x=1
print(a.y)
以及我如何使用覆盖变量,以下代码不起作用:
class a:
y=b.x
class b:
x=1
您正在执行print
作为类定义的一部分。在读取有关class b
的零件之前,它在Python看到该行时立即执行。
相反,使用类中的功能来执行代码 已经定义了类:
class a:
y=1
def go():
print(b.x)
class b:
x=1
def go():
print(a.y)
a.go()
b.go()
正如我在评论中所说的那样,您的代码无法有效利用类。我认为这将是更好的方法,可以在围绕循环参考问题上工作的灵活性。
首先是class
定义(遵循PEP 8命名约定指南):
class A:
def __init__(self, value, linked_value=None):
self.y = value
if isinstance(linked_value, B):
self.linked_value = linked_value.x
def print_linked_value(self):
print(self.linked_value)
class B:
def __init__(self, value, linked_value=None):
self.x = value
if isinstance(linked_value, A):
self.linked_value = linked_value.y
def print_linked_value(self):
print(self.linked_value)
类似的定义提供了两种设置循环引用的方法:
通过单独创建它们,然后明确链接它们:
# First create instances of each class. a = A(1) b = B(42) # Then link them. a.linked_value = b.x b.linked_value = a.y a.print_linked_value() # -> 42 b.print_linked_value() # -> 1
*或*通过创建第一个而没有链接值,只剩下第二个需要手动链接。
# First create instances of each class, but link the second to the first # when it's created. a = A(1) b = B(42, a) # Create and link to first. # Then link the first to the second to complete the circular references. a.linked_value = b.x # Same result. a.print_linked_value() # -> 42 b.print_linked_value() # -> 1
最终注释:另一种更高级的替代方案,也可以通过使用内置的property()
函数作为装饰器来创建"描述符",也可以在这种情况下应用。这是一个有点相关的问题的答案。
class A:
y = 1
def foo(self):
print B.x
class B:
x = 1
def bar(self):
print A.y
>>> A().foo()
2
>>> B().bar()
1
在某些函数定义中使用'print'。