如何阻止子类改写父类公共方法为长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计157个文字,预计阅读时间需要1分钟。
可以防止公共方法被子类覆盖吗?class Parent: def some_method():
class Parent def some_method #important stuff that should never be overwritten end end class Child < Parent def some_method #should not be possible to overwrite (raise an error if a child class tries to do it) end end
谢谢!
您可以使用’method_added’和’inherited’钩子来实现此目的:class Foo def self.inherited(sub) sub.class_eval do def self.method_added(name) if name == :some_method remove_method name raise Exception, "Can't override #{name} method" end end end end end class Bar < Foo end class Bar def some_method end end # => Exception: Can't override some_method method
本文共计157个文字,预计阅读时间需要1分钟。
可以防止公共方法被子类覆盖吗?class Parent: def some_method():
class Parent def some_method #important stuff that should never be overwritten end end class Child < Parent def some_method #should not be possible to overwrite (raise an error if a child class tries to do it) end end
谢谢!
您可以使用’method_added’和’inherited’钩子来实现此目的:class Foo def self.inherited(sub) sub.class_eval do def self.method_added(name) if name == :some_method remove_method name raise Exception, "Can't override #{name} method" end end end end end class Bar < Foo end class Bar def some_method end end # => Exception: Can't override some_method method

