python - Python 中的类用法

标签 python oop class-design procedural-programming

我用 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,你添加的每个动物,你都必须添加另一个 iftalk,添加另一个变量来存储动物的名字动物,可能触及模块中的每个功能,而在 OOP 上,您可以认为您的类独立于其他类。当发生全局变化时,您更改 Animal,当它是一个狭窄的变化时,您只需要查看类定义即可。

对于简单的、顺序的和可能一次性的代码,可以使用结构化编程。

关于python - Python 中的类用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440434/

相关文章:

c++ - 使用引用时多态性并不总是有效

javascript - 访问node.js中另一个类的构造函数值

c++ - 创建类数组

java - 为不可变类实现 clone()

python - 如何知道异常是Python中内置的还是用户定义的

python - 当我们用逻辑运算符返回时,Python 返回什么?

python - 如何使用python计算SQL数据库中的记录数

python - 使用 python 代码在 lcd 20x4 上创建自定义字符

java - 设计模式: Partial Object creation of unknown instance members at runtime

java - 如果可能的话,使用 bean 配置从不同的类向主类添加函数