我有一个代码:
class read:
a = 0
c = write.c
def get_num():
a = 6
return a
class write:
c = 0
a = read.get_num()
def do_num(self):
b = read.get_num()
self.c = 10
return b
print(write.c)
问题:
print(write.c)
的{{1}}末尾获得10
的解决方案。 c
行中的变量c
等于类3
中的c = 0
write
行中的变量c
等于类3
中的c = 10
答案 0 :(得分:0)
do_num()
需要设置write.c
而不是self.c
,以便它设置类属性而不是实例属性。然后您需要致电no_num()
。class write:
c = 0
a = read.get_num()
def do_num(self):
b = read.get_num()
write.c = 10
return b
w = write()
w.do_num()
print(write.c)
write.c
。class write:
c = 0
a = read.get_num()
def do_num(self):
b = read.get_num()
write.c = 10
return b
class read:
a = 0
c = write.c
def get_num():
a = 6
return a
read.c
设为一个类属性,以便在使用write.c
时读取其值。有关如何定义类属性的信息,请参见How to make a class property?。答案 1 :(得分:0)
您应该在这里考虑两件事,我强烈建议您仔细查看python中的继承,因为这正是您要寻找的。永远记住要遵循常规的命名模式,因此您的班级应大写
class Write:
c = 0
def do_num(self):
b = read.get_num()
self.c = 10
return b
class Read:
a = 0
c = Write.c
def get_num():
a = 6
return a
这将行不通,因为您每次都会尝试引用一个不存在的类,这意味着在创建类Write
时,您引用的代码是Read
类还没有破折号,如果您将其切换,您将遇到完全相同的问题。
话虽如此,我相信使用类属性而不是类变量会更适合您要在此处完成的工作
class Book:
def __init__(self, a, c):
self.c = c
self.a = a
def do_num(self):
#some code
def do_num(self):
#some code
write = Book(0, 10) #a=0 and c=10
read = Book(10, 0) #a=10 and c=0
使用此方法,您可以拥有a和c的各种实例和变体,而无需纠缠于继承网络中。而且,由于您试图在两个类中使用相同的变量和方法,因此没有理由不使其成为一个类并改用该类的实例