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

如何在Python中最好地实现这个Ruby代码,python,ruby,multiple-inheritance,mixins,Python,Ruby,Multiple Inheritance,Mixins,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

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中使用过混合或多重继承,所以这正是我放在一起的东西,所以我只想知道这是做我想做的事情的Pythonic方法,还是有一种更干净的编写方法。

你至少应该更喜欢使用magic
\uu str\uuuu
方法,而不是遵循Ruby的命名约定。使用
格式的字符串插值与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类上使用
\uuuuu init\uuuuuuuuuuuuu
方法。

您至少应该更喜欢使用magic
\uuuu str\uuuuuuuuuuuuuuu
方法,而不是遵循Ruby的命名约定。使用
格式的字符串插值与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类上使用
\uuuu init\uuuu
方法。

我不能评论Python代码,但Ruby代码很糟糕
to_f
应该返回一个
浮点值
,而不是
文件
,而且它肯定不会有任何副作用!另外,
self
是多余的。我从一本书lol中得到了ruby代码,它只是显示混合的示例代码,我认为这不是什么有意义的东西。我不能对Python代码发表评论,但ruby代码很糟糕
to_f
应该返回一个
浮点值
,而不是
文件
,而且它肯定不会有任何副作用!另外,
self
是多余的。我从一本书lol中得到了ruby代码,它只是显示混合的示例代码,我认为这不是什么有意义的东西。我不能对Python代码发表评论,但ruby代码很糟糕
to_f
应该返回一个
浮点值
,而不是
文件
,而且它肯定不会有任何副作用!另外,
self
是多余的。我从一本书lol中得到了ruby代码,不过它只是显示混合的示例代码,我认为这并不是什么有意义的东西。@steenslag。我想你是对的,我以为OP意味着它会出现在输出中,但它与Ruby版本不匹配。@steenslag。我想你是对的,我以为OP意味着它会出现在输出中,但它与Ruby版本不匹配。@steenslag。我认为你是对的,我认为OP意味着它会出现在输出中,但是它与Ruby版本不匹配。