Python类的理解

时间:2018-03-07 15:20:38

标签: python python-3.x class

我使用类键入代码而不使用类但我无法找到为什么类有用。两者都给出相同的输出。请帮助 这是代码;

1)

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys

class customWidget(QWidget):

    def __init__(self, parent=None):
        super(customWidget, self).__init__(parent)
        self.addButton()

    def addButton(self):
        button = QPushButton('not_showing')
        button.setParent(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = customWidget()

    button = QPushButton('showing')
    button.setParent(w)

    button.move(50,50)
    w.resize(600,600)
    w.move(1000,300)
    w.setWindowTitle('Simple')
    w.show()

    sys.exit(app.exec_())

2)

class Hero:
    def __init__(self,name,health,p,s):
        self.name=name
        self.health=health
        self.p=int(p)
        self.a=int(s)
        food=vars()
        print(self.name,self.health)
        self.eat()
        print(self.health)
    def eat(self):
        print('choose a or b')
        food=input('>')
        if food == 'a':
            self.health -= self.p
        elif food == 'b':
            self.health += self.a
        else:
            print('choose one among a and b')


Hero('Bob',100,10,5)
Hero('Ham',500,60,10)

有人请帮忙。

3 个答案:

答案 0 :(得分:5)

类是面向对象编程(OOP)的核心,OOP是一种编程范式(编写程序的“方式”),而不是程序编程(PP) - 您在第二个代码片段中使用的范例。

从根本上说,它们都具有相同的功能。在OOP中没有你可以做的事情,但你可以用PP做,反之亦然。但是,OOP提供了一些方便的快捷方式,使代码更容易编写和为我们人类使用:

  • 封装 - 您可以拥有包含表示其内在属性的某些数据的对象以及对这些对象进行操作的方法,但您可以隐藏所有这些内部结构并公开对用户实现对象范围有用的内容(免责声明 - 这可能有点干,只是给它一些时间考虑它以及为什么它有用;而且,python不是最好的语言来看这个)

  • 抽象 - 对象的用户不需要知道对象的内部。当你开车时想想现实世界。您需要知道如何使用控制器(例如方向盘,制动器),但您不一定需要知道发动机的工作原理 - 汽车从驱动程序中抽象出引擎细节。你可以用类

  • 做类似的事情

您还可以通过各种方式表示对象之间的关系,并“窃取”其行为的一部分。例如,您可以模拟猫是动物的事实,并且具有动物的基本属性(例如,活着,移动),以及使其成为猫的某些特定属性。

所有这些都证明在编写大型软件方面有很大帮助,因此使OOP成为最广泛使用的编程范例之一。这并不意味着通过PP无法实现相同的功能,或者无法在PP中模拟OOP提供的某些功能。这更麻烦。

答案 1 :(得分:0)

Python是一种非常通用的语言。它允许功能和面向对象编程。 Java或Ruby迫使程序员进入OO世界,而C不是非常友好。

话虽如此,OO范例是拥有可以对这些对象起作用的对象和方法,并且在OO范例中,您具有允许对某些对象类进行特化的多态性。这个范例在功能层面(在开始任何编码之前)是相关的,并且可以用任何语言实现,包括C和汇编,如果它与问题相关

如果您的功能分析仅仅结束于程序树,那么OO就没什么兴趣了。例如,要实现Eratosthenes的Sieve,或解决八皇后拼图(如果你不了解它们就在维基百科上搜索),OO几乎没有增加价值,Java实现可能会使用一个单独的类,因为不需要更多。

另一方面,如果您的分析发现它们之间有很多关系的对象,那么OO将是一个自然的工具。

答案 2 :(得分:0)

通常,随着更多功能的添加,小项目开始变大。在那个时间点,维护代码变得乏味。

为了解决这个问题,我们开发了继承,组合,设计模式等实践。 我建议您阅读https://www.toptal.com/python/python-design-patterns

不仅仅是关于代码的输出。它是关于你如何编写代码的。软件开发人员只是为编写一段代码而付钱,他们付钱编写可维护且健壮的代码。

顺便说一句,我不明白为什么你需要吃()。你没有在任何地方使用它。