Python类构造方法

时间:2017-10-11 23:01:55

标签: python class variables random constructor

所以我有这段代码:

import random

class Node():

    def __init__(self, name, content):
        self.name = name
        self.mac_address = self.generate_mac
        self.content = content

    def generate_mac():
       return  "%02x:%02x:%02x:%02x:%02x:%02x" % (
        random.randint(0, 255),
        random.randint(0, 255),
        random.randint(0, 255),
        random.randint(0, 255),
        random.randint(0, 255),
        random.randint(0, 255)
        )


class Switch():

    def __init__(self, name, content):
        self.name = name
        self.file = name + ".txt"
        self.content = content

    def write_table(self, send_node, recv_node):
        f = open(self.file, 'w')
        f.write(send_node.mac_address() + " " + send_node.name[-1])

我希望每个节点都有一个固定的MAC地址,稍后我可以使用node_instance.mac_address获取。但每次我这样做,我都会生成一个新地址。如何保持固定?

2 个答案:

答案 0 :(得分:1)

在您的__init__方法中意味着撰写

self.mac_address = self.generate_mac()

并在靠近底部的电话中写下

f.write(send_node.mac_address + " " + send_node.name[-1])

你写过

self.mac_address = self.generate_mac

这意味着self.mac_address实际上是一种方法。您希望在构造期间将其设置为字符串属性而不是方法。

答案 1 :(得分:0)

self.mac_address = self.generate_mac()

不是将函数赋值给变量,而是调用函数。然后在对象创建上:node_instance = Node()将运行 init 并生成Mac地址。 mac_address现在将是一个字符串(函数调用的结果),并且将来对node_instance.mac_address的所有调用都将是字符串。