如何在 Python 中最好地实现此 Ruby 代码

How to best implement this Ruby code in Python

Ruby代码:

module ToFile
  def filename
    "object_#{self.object_id}.txt"
  end

  def to_f
    File.open(filename, 'w') { |f| f.write(to_s) }
  end
end

class Person
  include ToFile
  attr_accessor :name

  def initialize(name)
    @name = name
  end

  def to_s
    name
  end
end

我的Python代码

class ToFile:
    def __init__(self):
        self.filename = "object_#{0}.txt".format(id(self))

    def to_f(self):
        with open(self.filename, 'w') as f:
            f.write(self.to_s())

class Person(ToFile):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def to_s(self):
        return self.name

我以前从未在 python 中使用过 mixins 或多重继承,所以这就是我放在一起的,所以我只想知道这是否是 Pythonic 做事的方式我想要或者有没有更简洁的写法。

您至少应该更喜欢使用神奇的 __str__ 方法,而不是遵循 Ruby 的命名约定。使用 format 的字符串插值与 Ruby 的工作方式完全不同,但在这种情况下,删除 # 的工作方式等效于

class ToFile:
    def __init__(self):
        self.filename = "object_{0}.txt".format(id(self))

    def to_f(self):
        with open(self.filename, 'w') as f:
            f.write(str(self))

class Person(ToFile):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def __str__(self):
        return self.name

to_f 也应该重命名为 write_to_file 之类的。

我也会避免在 mixin 类.

上使用 __init__ 方法