Ruby で書いたこの FizzBuzz コードを Python で書くとどうなるのでしょうか?


普段はRubyを使っています。Pythonの勉強を始めたのですが、早速躓いていたので教えて下さい。

[code]

    class FizzBuzz
      def self.fizz?(i)
        i > 0 && (i % 3) == 0
      end
    
      def self.buzz?(i)
        i > 0 && (i % 5) == 0
      end
    
      def self.fizz_buzz?(i)
        fizz?(i) && buzz?(i)
      end
    
      def self.to_p(i)
        case
        when fizz?(i) && !fizz_buzz?(i)
          'Fizz'
        when buzz?(i) && !fizz_buzz?(i)
          'Buzz'
        when fizz_buzz?(i)
          'FizzBuzz'
        else
          i
        end
      end
    end
    
    1.upto(100) do |i|
      puts FizzBuzz.to_p(i)
    end
    
[/code]

これをPythonで書こうとしてるのですが、書き方がわかりません。  
以下が私の書いたPythonのコードです。(実行できません)  
「Pythonらしく書くにはこうするとよい」などのアドバイスもいただけると幸いです。

[code]

    class FizzBuzz:
        @classmethod
        def is_fizz(i):
            return (i > 0 and (i % 3) == 0)
    
        @classmethod
        def is_buzz(i):
            return (i > 0 and (i % 5) == 0)
    
        @classmethod
        def is_fizz_buzz(i):
            return (self.is_fizz(i) and self.is_buzz(i))
    
        @classmethod
        def to_print(i):
            if self.is_fizz(i) and not self.is_fizz_buzz(i):
                return 'Fizz'
            elif self.is_buzz(i) and not self.fizz_buzz(i):
                return 'Buzz'
            elif self.fizz_buzz(i):
                return 'FizzBuzz'
            else:
                return i
    
    for i in range(1, 101):
        print FizzBuzz.to_print(i)
    
[/code]




クラス勉強には、上記のものはいいと思いますが、関数を使えばもっと簡単になります。  
（ちなみにpythonでは、.to_print()のようなメソッドは、あまり見ないので、ここでは、rubyぽっくpythonを書いている感じがします）

[code]

    def fizzbuzz(n):
        if n % 3 == 0 and n % 5 == 0:
            return 'FizzBuzz'
        elif n % 3 == 0:
            return 'Fizz'
        elif n % 5 == 0:
            return 'Buzz'
        else:
            return str(n)
    
    for i in range(1, 101):
        print(fizzbuzz(i))
    
[/code]

