python - 我可以在不在 Python 中创建新类的情况下覆盖类函数吗?

标签 python oop object polymorphism overriding

我正在用 pygame 制作游戏,我制作了一个“抽象”类,它的唯一工作是存储给定级别的 Sprite (目的是将这些级别对象放在列表中以方便移动玩家从一层到另一层)

好了,问题来了。如果我可以在 Python 中做同样的事情(Java 代码):

Object object = new Object (){
    public void overriddenFunction(){
        //new functionality
        };
    };

当我在游戏中构建关卡时,我只需使用 Sprite 去向的信息覆盖构造函数(或负责构建关卡的类/实例方法),因为为游戏中的每个级别都不是那么优雅的答案。或者,我必须在关卡类中创建方法,然后在实例化关卡对象后构建关卡,并根据需要放置 Sprite 。

因此,在一位更坚定的开发人员继续谈论这可能是多么反 Python 之前(我已经阅读了足够多的本网站以从 Python 专家那里获得这种氛围)请告诉我它是否可行。

最佳答案

是的,你可以!

class Foo:
    def do_other(self):
        print('other!')
    def do_foo(self):
        print('foo!')


def do_baz():
    print('baz!')

def do_bar(self):
    print('bar!')

# Class-wide impact
Foo.do_foo = do_bar
f = Foo()
g = Foo()
# Instance-wide impact
g.do_other = do_baz

f.do_foo()  # prints "bar!"
f.do_other()  # prints "other!"

g.do_foo()  # prints "bar!"
g.do_other()  # prints "baz!"

So, before one of the more stanch developers goes on about how anti-python this might be

以这种方式覆盖函数(如果你有充分的理由这样做)对我来说似乎是相当 pythonic 的。您可能必须这样做的一个原因/方式的一个示例是,如果您有一个静态继承没有或不能应用的动态特性。

反对的案例可能在 Python 之禅中找到:

  • 美丽总比丑陋好。
  • 可读性很重要。
  • 如果实现难以解释,那就不是个好主意。

关于python - 我可以在不在 Python 中创建新类的情况下覆盖类函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17757238/

相关文章:

c++ - 如何将A类型的数据写入B类型的格式

Python:强制新型类

c++ - 包括类作为结构中的成员

JavaScript - 维护对象键值顺序

python - 按周重新采样数据

python - 脚本在 IDLE 中工作,但 .py 文件不工作

python - 如何在另一个模型中使用用户模型的过滤方法(django)

python - 使用vobject在django-python中解析vcf文件

c++ - 虚拟类和多态性

javascript - 传入对象和数组变量