gpt4 book ai didi

Python MixIn 标准

转载 作者:行者123 更新时间:2023-12-04 12:49:20 27 4
gpt4 key购买 nike

所以我正在编写一些代码,并且最近遇到了实现一些 mixin 的需要。我的问题是,设计混音的正确方法是什么?我将使用下面的示例代码来说明我的确切查询。

class Projectile(Movable, Rotatable, Bounded):
'''A projectile.'''
def __init__(self, bounds, position=(0, 0), heading=0.0):
Movable.__init__(self)
Rotatable.__init__(self, heading)
Bounded.__init__(self, bounds)
self.position = Vector(position)

def update(self, dt=1.0):
'''Update the state of the object.'''
scalar = self.velocity
heading = math.radians(self.heading)
direction = Vector([math.sin(heading), math.cos(heading)])
self.position += scalar * dt * direction
Bounded.update(self)

class Bounded(object):
'''A mix-in for bounded objects.'''
def __init__(self, bounds):
self.bounds = bounds

def update(self):
if not self.bounds.contains(self.rect):
while self.rect.top > self.bounds.top:
self.rect.centery += 1
while self.rect.bottom < self.bounds.bottom:
self.rect.centery += 1
while self.rect.left < self.bounds.left:
self.rect.centerx += 1
while self.rect.right > self.bounds.right:
self.rect.centerx -= 1

基本上,我想知道,混入有点像 Java 接口(interface),其中有一种(在 Python 的情况下是隐式的)契约(Contract),如果希望使用代码,则必须定义某些变量/函数(与框架不同) ,还是更像我上面写的代码,每个混入必须显式初始化?

最佳答案

您可以在 Python 中同时拥有这两种行为。您可以通过使用抽象基类或在虚函数中引发 NotImplementedError 来强制重新实现。

如果 初始化 在 parent 的类里面很重要,那么你必须调用他们。正如 eryksun 所说,使用 super内置函数来调用父级的初始化器(这样,给定类的初始化器只会被调用一次)。

结论:取决于你有什么。在您的情况下,您必须调用 初始化 , 你应该使用 super .

关于Python MixIn 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com