python oop求三角形面积公式_Python设计:OOP

我试图沿着这些方向做点什么:

class A:

def __init__( self, x=None, y=None ):

self.x = x

self.y = y

class B( A ):

def do_something_in_Bs_context( self ):

print "In B"

class C( A ):

def do_something_in_Cs_context( self ):

print "In C"

a = A(1,2)

b = B.do_something_in_Bs_context( a )

c = C.do_something_in_Cs_context( a )

正如预期的那样,此代码将生成此错误:

TypeError: unbound method do_something_in_Bs_context() must be called with B instance as first argument (got A instance instead)

这种设计的根本原因是A是数据的容器(比如表),B和C是A上的一组操作.B和C都在相同的数据上运行,但在概念上是一组独特的操作,可以对相同的数据执行.我可以将A和B中的所有操作联合起来,但我想在概念中创建分离. (例如,在表格中,我可以执行不同的操作集合,可以分组为“微积分”或“三角函数”.所以A:表,B:微积分,C:Trignometry)

这让我想起了模型 – 视图 – 控制器范例,略有不同.

我想出了以下解决方案:

> B和C被实现为概念上不同的类(a

视图/控制器),用于维护对A和A实例的引用

在那个实例上运作.

>既然B和C只是组合在一起

A上的方法,创建具有操作的函数的模块

A.的实例

我不喜欢这些解决方案中的任何一个(2稍微好于1),但后来我不确定是否有更好/更清洁/更pythonic的方法来解决这个问题.有什么指针吗?

解决方法:

以下是我理解这个问题的方法:B和C是使用A类数据的函数集合.您要做的是逻辑分组函数.

我建议做以下其中一项:

>将函数分离为在A上运行的B和C类 – 这是HAS-A关系.如果你需要的话,函数/方法可以是静态的

>将功能分成模块B和C,创建顶级功能定义

我认为继承对这个问题来说是一个糟糕的解决方案.我不认为有IS-A关系.

标签:python,oop,inheritance

来源: https://codeday.me/bug/20190613/1235539.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值