我用 Python 编写了很多脚本来分析和绘制实验数据,并编写了简单的模拟来测试理论与数据的拟合程度。这些脚本往往是非常程序化的;计算一些属性,计算一些其他属性,绘图属性,分析绘图...
与其仅仅编写一个过程,不如使用一个类有好处吗?我可以将实际分析隐藏到函数中,这样我就可以将数据传递给函数并让它做这件事,但函数不包含在类中。
类会带来什么样的缺点?如果可以按程序编写,使用类的目的是什么?
如果这是在我道歉之前发布的,请指出我的方向。
最佳答案
通过使用面向对象编程,您将拥有具有关联功能的对象,这些功能(应该)是修改其属性(内部变量)的唯一方法。
trim_string(string)
函数很常见,而使用 string
类,您可以执行 string.trim()
。这种差异主要在处理大型复杂模块时很明显,在这种情况下,您需要尽一切努力减少各个组件之间的耦合。
还有其他概念包含 OOP,例如继承,但真正重要的是要知道,OOP 是关于让您考虑具有操作和消息传递(方法/动词)的对象 ,而不是根据操作(函数/动词)和基本元素(变量)来思考
The importance of the object oriented paradigm is not as much in the language mechanism as it is in the thinking and design process.
另请查看 this question .
结构化编程本身并没有什么错误,只是一些问题可以更好地映射到面向对象的设计。
例如,您可以使用 SP 语言:
#Pseudocode!!!
function talk(dog):
if dog is aDog:
print "bark!"
raise "IS NOT A SUPPORTED ANIMAL!!!"
>>var dog as aDog
>>talk(dog)
"bark!"
>>var cat as aCat
>>talk(cat)
EXCEPTION: IS NOT A SUPPORTED ANIMAL!!!
# Lets add the cat
function talk(animal):
if animal is aDog:
print "bark!"
if animal is aCat:
print "miau!"
raise "IS NOT A SUPPORTED ANIMAL!!!"
在 OOP 上你会:
class Animal:
def __init__(self, name="skippy"):
self.name = name
def talk(self):
raise "MUTE ANIMAL"
class Dog(Animal):
def talk(self):
print "bark!"
class Cat(Animal):
def talk(self):
print "miau!"
>>dog = new Dog()
>>dog.talk()
"bark!"
>>cat = new Cat()
>>cat.talk()
"miau!"
你可以看到,对于 SP,你添加的每个动物,你都必须添加另一个 if
到 talk
,添加另一个变量来存储动物的名字动物,可能触及模块中的每个功能,而在 OOP 上,您可以认为您的类独立于其他类。当发生全局变化时,您更改 Animal
,当它是一个狭窄的变化时,您只需要查看类定义即可。
对于简单的、顺序的和可能一次性的代码,可以使用结构化编程。
关于python - Python 中的类用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440434/