gpt4 book ai didi

python - python中的面向对象设计

转载 作者:行者123 更新时间:2023-12-01 04:34:58 25 4
gpt4 key购买 nike

我有一个基本功能

 class Foo(object):


def method(self):
return True # or False based on custom logic for each class that will implement this class

def almost_common_method(self, params, force):
if self.method():
params.bleh = 'foo bar'
else:
params.bleh = 'not foo bar'
if force:
foobar = some_foo_bar(model_name = 'foo bar')
else:
default = Default()


def common_method(self, params, force):
return self.almost_common_method(params, force)

所以,我正在考虑创建一个基类...其中方法引发 NotImplementedError我在基类中实现 common_method() ,因为这将在继承基类的所有类之间共享?但是有没有一种方法可以在基类中定义almost_common_method()..变量名称是常见的..但是字符串分配会有所不同..在这个基类的不同实现中。?

最佳答案

这非常适合 template method pattern 。将字符串分解为一个单独的方法:

class FooBase(object):
@property
def bleh(self):
raise NotImplementedError()
# consider making this an abstract base class with the abc module
def almost_common_method(self, params, force):
params.bleh = self.bleh
if force:
foobar = some_foo_bar(model_name = 'foo bar')
else:
default = Default()

class Foo(FooBase):
@property
def bleh(self):
if self.method():
return 'foo bar'
else:
return 'not foo bar'

每个子类都可以用自己单独的实现来重写bleh

@property 的使用是可选的,通常仅当您希望 bleh 充当属性(即,它不会改变)时才使用by magic”,获取它相对便宜并且没有明显的副作用等)。

关于python - python中的面向对象设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863076/

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