【问题标题】:Python Class Constructor MethodsPython 类构造方法
【发布时间】:2018-03-23 18:06:55
【问题描述】:

所以我有这个代码:

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 获取该地址。但每次我这样做时,我都会生成一个新地址。我如何保持它固定?

【问题讨论】:

  • 不要每次都随机生成?无论如何,这不是生成有效 MAC 的好方法。
  • generate_mac的构造函数中添加括号。它应该变成self.generate_mac()
  • 谷歌或搜索Stack Overflow生成m​​ac,在整理整个随机与持久位后,看看如何安全地生成随机MAC。

标签: python class variables random constructor


【解决方案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 实际上是一种方法。您希望在构造期间将其设置为字符串属性而不是方法。

【讨论】:

  • 这看起来像是一条评论。
  • 真的吗?有评论要求澄清问题。答案告诉 OP 他或她想知道什么。我错了吗?
  • 嗯,看起来你可能是对的。我刚刚登陆stackoverflow.com/questions/46698861/…,Pointy 在评论中指出了一个缺少的逗号,而不是一个答案......虽然这是修复语法错误。差一点,但我明白你在说什么。
  • 最初的答案只是错字。目前的答案,我不太确定这是发帖人要问的,即不是很明显这是关于错字的,但我想他们可以插话。
  • 应该已经看到了。很抱歉这么简单的事情打扰了。
【解决方案2】:
self.mac_address = self.generate_mac()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2013-05-28
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多