gpt4 book ai didi

Python面向对象编程: Composition

转载 作者:行者123 更新时间:2023-12-03 02:21:07 28 4
gpt4 key购买 nike

我一直在学习如何在 python 编程中实现组合,但我很难理解为什么它比继承更受欢迎。

例如,这是迄今为止我的代码:

class Particle:
# Constructor (public)
def __init__(self, _name, _charge, _rest_energy, _mass, _velocity):
# Attributes (private)
self.__name = _name
self.__charge = _charge
self.__restEnergy = _rest_energy
self.__mass = _mass
self.__velocity = _velocity

# Getter functions (public)
def getName(self):
return self.__name

def getCharge(self):
return self.__charge

def getRestEnergy(self):
return self.__restEnergy

def getMass(self):
return self.__mass

def getVelocity(self):
return self.__velocity

# Setter procedures (public)
def setName(self, _name):
self.__name = _name

def setCharge(self, _charge):
self.__charge = _charge

def setRestEnergy(self, _rest_energy):
self.__restEnergy = _rest_energy

def setMass(self, _mass):
self.__mass = _mass

def setVelocity(self, _velocity):
self.__velocity = _velocity


class Quark:
# Constructor (public)
def __init__(self, _name, _charge, _strangeness):
# Attributes (private)
self.__name = _name
self.__charge = _charge
self.__strangeness = _strangeness

# Getter functions (public)
def getName(self):
return self.__name

def getCharge(self):
return self.__charge

def getStrangeness(self):
return self.__strangeness


class Hadron:
# Constructor (public)
def __init__(self, _name, _charge, _rest_energy, _mass, _velocity, _quarks):
# Attributes (private)
self.__particle = Particle(_name, _charge, _rest_energy, _mass, _velocity)
self.__quarks = _quarks

# Getter functions (public)
def getParticle(self):
return self.__particle

def getQuark(self):
return self.__quarks

def getStrangeness(self):
_quarks = self.__quarks
_strangeness = 0
for _quark in _quarks:
_strangeness += _quark.getStrangeness()
return _strangeness

def getRelCharge(self):
_quarks = self.__quarks
_relCharge = 0
for _quark in _quarks:
_relCharge += _quark.getCharge()
return _relCharge

def getName(self):
return self.__particle.getName()

def getCharge(self):
return self.__particle.getCharge()

def getRestEnergy(self):
return self.__particle.getRestEnergy()

def getMass(self):
return self.__particle.getMass()

def getVelocity(self):
return self.__particle.getVelocity()

# Setter functions (public)
def setName(self, _name):
self.__particle.setName(_name)

def setCharge(self, _charge):
self.__particle.setCharge(_charge)

def setRestEnergy(self, _rest_energy):
self.__particle.setRestEnergy(_rest_energy)

def setMass(self, _mass):
self.__particle.setMass(_mass)

def setVelocity(self, _velocity):
self.__particle.setVelocity(_velocity)

我不确定我是否在这里搞错了,但是当我可以从 Particle 类继承时,这似乎非常浪费。

我做错了什么吗?

最佳答案

您使用哪一种取决于您想要建立的关系模型。

组合并不总是更好的选择。 “组合优于继承”经常被重复,因为继承经常被滥用,认为它可以减少需要编写的代码量。但这是你做出决定的完全错误的动机。

如果您有两个类,AB,则粗略的一般指南是:

  • 如果 B A,您可能需要继承。
  • 如果 B 有一个 A,您可能需要组合。

就您的情况而言,根据我对粒子物理学的极其有限的知识,强子是一个粒子,因此继承可能是更好的选择合身。 强子包含/粒子,所以我认为你正在试图对抗通过在这里强制组合来 Cereal 。

关于Python面向对象编程: Composition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59602093/

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