如何从另一个类继承变量

时间:2020-01-14 00:45:00

标签: python

我有一个代码:

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)

问题:

  1. 如何在print(write.c)的{​​{1}}末尾获得10的解决方案。
  2. 如何使c行中的变量c等于类3中的c = 0
  3. 如何使write行中的变量c等于类3中的c = 10

2 个答案:

答案 0 :(得分:0)

  1. 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)
  1. 您需要按其他顺序定义类。在定义类之前,您无法访问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
  1. 您需要将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的各种实例和变体,而无需纠缠于继承网络中。而且,由于您试图在两个类中使用相同的变量和方法,因此没有理由不使其成为一个类并改用该类的实例

相关问题