41

クラス関数をオーバーライド不可にする方法はありますか? javaのfinalキーワードのようなもの。つまり、オーバーライド クラスはそのメソッドをオーバーライドできません。

4

4 に答える 4

153

そこにコメントを入れて、次の効果を得ることができます。

# We'll fire you if you override this method.

このようなローテク ソリューションが実際にうまく機能するのは驚くべきことです。

于 2010-03-11T14:42:08.173 に答える
46

問題は、Java 哲学を使用して Python で記述しようとしていることです。一部のものは引き継がれますが、すべてではありません。Python では、次のことができます。これはまったく問題ありませんが、Java のオブジェクトの考え方に完全に反します。

class Thing(object):
    x = 1
something = Thing()
something.y = something.x

本当に必要な場合は、ここに投稿されたコードを試すことができます。しかし、ご覧のとおり、必要なことを実行させるためのコードがたくさんあります。__dict__また、コードを投稿した人でさえ、またはを使用して渡すことができると言っていることに注意してくださいobject.__setattr__

于 2010-03-11T14:39:01.160 に答える
-1

はい、ありません。

反対票の後にこれに追加する必要があります。このような保護メカニズムは、Python の精神、つまり「私たちはここにいるすべての大人に同意している」と反するものと見なされています。そのような機能を誰から保護したいですか? そして、コメントが十分でない場合、なぜ「より強い」ものになるのでしょうか?

私はあなたの期待を文書化し、他のプログラマーが責任を持って行動することを期待します.

于 2010-03-11T21:03:34.863 に答える