到底是用类的函数,还是普通的函数

python中要实现一些功能,可以采用普通的函数,亦可以定义一个类,在类内定义一个函数.那究竟应该采用哪种方法呢?

普通的函数,传参数只是通过入参来进行,当同一个文件中多个接口要访问同一个变量时,可以通过在文件头部定义全局变量.

 

而类中传入参数可以在初始化(__init__())的时候传入参数,并把参数作为类的成员变量,以便类的成员函数去使用.

def __init__(self, path):
    self.path = path #类中的函数都可以通过self.path来获得path的值了

实际上就是面向过程和面向对象之间的区别:

面向过程代码简单一些,但是不能够继承,多态,封装.

面向对象代码多了些,但是可维护性好.

如果定义的函数用不到那些丰富的功能,大可以用普通函数去实现.

# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 超人
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蝙蝠侠
# 小猪佩奇. 使用嘴巴嘟嘟技能攻击 蜘蛛侠
 
# 面向过程: 代码非常的冗余. 尤其是参数
def fight_superman(name, jineng):
    print("%s使用%s攻击超人" % (name, jineng))
 
def fight_batman(name, jineng):
    print("%s使用%s攻击蝙蝠侠" % (name, jineng))
 
def fight_spiderman(name, jineng):
    print("%s使用%s攻击蜘蛛侠" % (name, jineng))
 
 
fight_superman('小猪佩奇', "嘴巴嘟嘟")
fight_batman('小猪佩奇', "嘴巴嘟嘟")
fight_spiderman('小猪佩奇', "嘴巴嘟嘟")
 
 
class Pig:
    def __init__(self, name, jineng):
        self.name = name
        self.jineng = jineng
 
    def fight_superman(self):
        print("%s使用%s攻击超人" % (self.name, self.jineng))
 
    def fight_batman(self):
        print("%s使用%s攻击蝙蝠侠" % (self.name, self.jineng))
 
    def fight_spiderman(self):
        print("%s使用%s攻击蜘蛛侠" % (self.name, self.jineng))
 
 
pg = Pig("小猪佩奇", "嘴巴嘟嘟")
# 不需要向原来一样传递一样的参数了
# 面向对象的程序: 结果相对清晰. 缺点: 代码量比原来大, 上手太难
pg.fight_batman()
pg.fight_spiderman()
pg.fight_superman()

 

参考文章:https://www.cnblogs.com/WANG-/p/10133775.html

posted @ 2019-02-17 21:26  心媛意码  阅读(183)  评论(0编辑  收藏  举报