Python——类与对象(为啥要用类和对象?有什么好处?)

  1. 类、对象在实际编程中有啥好处,为啥要用它们
  2. 再给你解释怎么去理解它们

1.类的好处主要有

  • 方便复用(如果你用函数写,就要复制整块代码,增加了代码量,增加了出错率)
  • 方便扩展(函数写段代码,若要升级、扩展,都十分复杂,容易出错,用类来扩展,则方便清晰)
  • 方便维护(因为类是把抽象的东西映射成我们常见的,摸得到的东西,容易理解,维护也方便)

举几个例子:

比如你是玩具厂的工程师,你要制作一个机器,可以批量制作鸭子形状的玩具,也许你的思路如下:

def makeDuckMoth():
    #这里可以放其他制作细节
    print('鸭子嘴巴制作完毕')

def makeDuckEar():
    #这里可以放其他制作细节
    print('鸭耳朵制作完毕')

def makeDuckEye():
    #这里可以放其他制作细节
    print('鸭眼睛制作完毕')

def makeDuckHead():
    #这里可以放其他制作细节
    print('鸭头制作完毕')

def makeDuckWing():
    #这里可以放其他制作细节
    print('鸭翅膀制作完毕')

def makeDuckBody():
    #这里可以放其他制作细节
    print('鸭身体制作完毕')

def makeDuckFoot():
    #这里可以放其他制作细节
    print('鸭脚制作完毕')

def makeDuckMerge():
    #这里可以放其他制作细节
    print('鸭子组装完毕')

makeDuckMoth() #制作鸭嘴巴
makeDuckEar() #制作鸭耳朵
makeDuckEye() #制作鸭眼睛
makeDuckHead() #制作鸭头
makeDuckWing()  #制作鸭翅膀,注意,猪是没有翅膀的
makeDuckBody() #制作鸭身体
makeDuckFoot() #制作鸭脚
makeDuckMerge() #合并鸭子的各个部位,组装成最终鸭子

第二天,老板让你,制作猪形状的玩具,难道你的代码如下:

def makePigMoth():
    #这里可以放其他制作细节
    print('猪嘴巴制作完毕')

def makePigEar():
#这里可以放其他制作细节
print(‘猪耳朵制作完毕’)

def makePigEye():
#这里可以放其他制作细节
print(‘猪眼睛制作完毕’)

def makePigHead():
#这里可以放其他制作细节
print(‘猪头制作完毕’)

def makePigBody():
#这里可以放其他制作细节
print(‘猪身体制作完毕’)

def makePigHand():
#这里可以放其他制作细节
print(‘猪手制作完毕’)

def makePigFoot():
#这里可以放其他制作细节
print(‘4只猪脚制作完毕’)

def makePigMerge():
#这里可以放其他制作细节
print(‘猪组装完毕’)

makePigMoth() #制作猪嘴巴
makePigEar() #制作猪耳朵
makePigEye() #制作猪眼睛
makePigHead() #制作猪头
makePigBody() #制作猪身体
makePigFoot() #制作4只猪脚
makePigMerge() #合并猪的各个部位,组装成最终猪

这样来,你确实完成了工作,但有没有觉得 有点累?

是不是觉得,猪和鸭子有很多相似之处?

如果你学会了,类的用法,可以非常轻松,下面是类的用法


类就像是基因的制造图纸,我们人类,生的小孩,也是两只手,两只脚,一个嘴巴,除非变异,否则不会多出一只脚的,之所以这样有序的发展,是因为我们身体里,有基因这张图纸控制着我们的繁衍


现在我们给上面例子中的制作鸭子、猪建立一个通用的制作基因表,利用他们相似制作流程 建立基因表

class Animal(object):
    '''
    猪和鸭子的基类(基因图纸表)
    '''
    def __init__(self, name): # 实例化的时候传入要制作的东西名字,如猪、鸭子
        self.name = name 
    def makeMoth(self):
        #这里可以放其他制作细节  
        print(self.name+'的嘴巴 制作完毕') #这里的self.name就是获取我们传入的name

    def makeEar(self):
        #这里可以放其他制作细节  
        print(self.name+'的耳朵 制作完毕') 

    def makeEye(self):
        #这里可以放其他制作细节  
        print(self.name+'的眼睛 制作完毕') 

    def makeHead(self):
        #这里可以放其他制作细节  
        print(self.name+'的头 制作完毕') 

    def makeBody(self):
        #这里可以放其他制作细节  
        print(self.name+'的身体 制作完毕') 

    def makeFoot(self):
        #这里可以放其他制作细节  
        print(self.name+'的脚 制作完毕') 

    def makeMerge(self):
        #这里可以放其他制作细节  
        print(self.name+'合并完毕') 

    def makeAll(self): 
        # 一条龙。直接跑完整个流水线
        self.makeMoth()
        self.makeEar()
        self.makeEye()
        self.makeHead()
        self.makeBody()
        self.makeFoot()
        self.makeMerge()

可以看到,上面的图纸里,我们没有放 makeWing() #制作翅膀,那是因为猪不会飞,我们只放猪和鸭子共有的、相同的东西

接下来,用这个类,继承给Pig,代码如下

class Pig(Animal):  # 括号里写Animal,意思是Pig继承Animal的所有特性,类似你继承你老爸的基因
    def makeMoth(self):
        #这里加详细的猪嘴巴制作流程,如长嘴巴,有两个孔  
        print(self.name+'的嘴巴 制作完毕') 

    def makeEar(self):
        #耳朵大大的
        print(self.name+'的耳朵 制作完毕') 

    def makeEye(self):
        #眼睛小小的 
        print(self.name+'的眼睛 制作完毕') 

    def makeHead(self):
        #很大的头 
        print(self.name+'的头 制作完毕') 

    def makeBody(self):
        #略 
        print(self.name+'的身体 制作完毕') 

    def makeFoot(self):
        #略  
        print(self.name+'的脚 制作完毕') 

    def makeMerge(self):
        #略  
        print(self.name+'合并完毕')

在class Pig中,如 makeMoth里面,只加入详细制作猪嘴巴的代码,不要把制作猪头的代码放这里哦

你发现,class Pig中 没有了这2段代码,这是因为,如果你继承别的对象,如Animal后,若完全不修改某些方法属性,就可以不写出来(实际还是存在Pig中的)

def __init__(self, name):
        self.name = name 

    def makeAll(self): 
        # 一条龙。直接跑完整个流水线
        self.makeMoth()
        self.makeEar()
        self.makeEye()
        self.makeHead()
        self.makeBody()
        self.makeFoot()
        self.makeMerge()

写出来意味着,你要覆盖以前代码块里的行为,如 我们写出了makeMoth,makeEar ...

意味着我们要把makeMoth里的制作细节改成我们想要的,

猪和鸭子的嘴巴长得不一样,制作细节肯定不同,对吧?


最后我们用以下代码,让机器开始造猪

pig1 = Pig('猪')  #实例化,相当于怀孕
pig1.makeAll()  # 开始造猪,相当于在子宫里形成整体

现在开始造鸭子的图纸,继承Animal,覆盖某些代码

class Duck(Animal):  # 
    def makeMoth(self):
        #这里加详细的鸭子嘴巴制作流程,如长嘴巴,嘴巴硬 
        print(self.name+'的嘴巴 制作完毕') 

    def makeEar(self):
        #耳朵很小
        print(self.name+'的耳朵 制作完毕') 

    def makeEye(self):
        #眼睛小小的 
        print(self.name+'的眼睛 制作完毕') 

    def makeHead(self):
        #头很小 
        print(self.name+'的头 制作完毕') 

    def makeBody(self):
        #略 
        print(self.name+'的身体 制作完毕') 

    def makeFoot(self):
        #略  
        print(self.name+'的脚 制作完毕')     

    def makeMerge(self):
        #略  
        print(self.name+'合并完毕') 

    def makeWing(self): #增加翅膀的制作流程
        #略  
        print(self.name+'的翅膀 制作完毕') 

    def makeAll(self): #因为增加了翅膀,所以要覆写这个函数      
        self.makeMoth()
        self.makeEar()
        self.makeEye()
        self.makeHead()
        self.makeBody()
        self.makeFoot()
        self.makeWing()  #插入翅膀制作流程
        self.makeMerge()

然后用以下代码实例化,开始做鸭子

duck1 = Duck('鸭子')
duck1.makeAll()

以后我们要狗、牛、企鹅,都可以从Animal继承, Animal给我们提供了一个框架,我们只需要在这个框架上,扩展,延伸 就可以很方便的做出任何东西,这就是类的魅力


如果你要做个别的咋办?

可以建立一个 足够通用基类,慢慢扩展, 类似人类的老祖宗,最开始是微生物,后来是猴子

class Weishengwu(object):
    '''假设一开始的老祖宗只会吃东西'''
    def __init__(self, name): 
        self.name = name 
    def eat(self):
        print('吃东西')

#开始进化成鱼类

class Fish(Weishengwu):
    '''在老祖宗只会吃的基础上,学会了移动'''
    def move(self):
        print('移动')


#开始进化成猴子

class Houzi(Fish):
    '''在鱼的基础上学会了爬树'''
    def __init__(self, name, love):  # 以前只有名字,现在有了爱好,或许是吃桃子、或许是荡秋千
        self.name = name 
        self.love = love 
    def eat(self):
        #覆写,因为吃东西的方式可能和鱼类不一样了
        print('牙齿吃东西')

    def move(self):
        #覆写,不是在水里移动了,是陆地上移动
        print('脚移动')

    def Pashu(self):
        print('爬树')

#你可以继续进化,继续给他增加任何功能

希望可以帮到你

  • 51
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 面向对象的程序设计分为两种,一种是基于的,另一种是基于原型的。其中基于的程序设计是最常见的一种,它主要涉及到两个概念,即类和对象是一个抽象的概念,它描述了一具有相同属性和方法的对象,而对象则是具体的实例。在基于的程序设计中,用于描述对象的属性和方法,而对象则是的具体实现。因此,基于的程序设计更注重对象的封装、继承和多态等概念。 ### 回答2: 面向对象编程是一种程序设计范式,它把程序看作是一组对象的集合,每个对象都有一个特定的属性和方法。在Python中,每个对象都是一个的实例,是一个抽象的概念,用于表示一组相似的对象。对象是的实例,它继承了的属性和方法,同时可以拥有自己的属性和方法。 在Python中,定义的语法为: class ClassName: # 属性和方法 在定义中,可以定义属性和方法,的属性是一些数据,用来描述的特征;的方法是一些函数,用来描述的行为。同时,还可以继承其他的属性和方法,通过继承,子可以重用父的代码,同时也可以增加自己的属性和方法。 在Python中,对象的创建和使用的语法为: object_name = ClassName() 在对象的创建过程中,会调用的构造函数(__init__()方法),用来初始化对象的属性和方法。然后,可以使用对象的属性和方法来完成具体的任务。 在面向对象编程中,有三个重要的概念,分别是封装、继承和多态。封装是指把数据和行为包装在一个中,对外部隐藏具体的实现细节;继承是指子可以继承父的属性和方法,在子中可以重写父的方法和添加自己的方法;多态是指同一个方法可以在不同的对象上产生不同的结果,通过实现多态,程序可以更加灵活和可扩展。 最后,在Python中,还可以通过__str__()方法来自定义对象的字符串表示方式,方便输出和调试。同时,还可以通过@property和@setter装饰器来实现属性的封装和保护。 总之,类和对象是面向对象编程的基础,它提供了一种更加灵活和可扩展的编程方式,同时也对程序的设计和架构提出了更高的要求。因此,熟练掌握类和对象的相关知识,是Python编程的基础和必备技能。 ### 回答3: Python中的面向对象编程(Object-Oriented Programming,OOP)是一种将数据和行为封装在一起,以创建对象为中心的思想。在Python中,一切皆为对象,从简单的数字、字符串到复杂的列表、元组都是对象。面向对象(Object-Oriented)编程中最基本的两个概念是类和对象是一种数据型,是一组相关数据和方法的描述。其实就是一个对象的模板,包含了它所描述的对象共有的属性和方法。Python中定义的方法比较简单,使用关键字`class`即可,例如: ```python class Dog: def __init__(self, name, age): self.name = name self.age = age def bark(self): print("汪汪!") ``` 上述代码定义了一个Dog,包含了Dog对象共有的属性(name和age)和方法(bark)。通过关键字`def`定义Dog的方法,其中`__init__`方法是一个特殊的方法,用于初始化的对象属性。 当我们需要使用Dog时,需要将它实例化为一个对象。例如: ```python dog1 = Dog("小黑", 3) dog1.bark() # 输出:汪汪! ``` 上述代码创建了一个Dog对象,设置了它的name为“小黑”,age为3,然后调用了Dog的方法bark。 另外,Python中还有一些内置函数,可以用于操作类和对象。例如: - `type`函数:用于返回对象的型。使用方法为`type(object)` - `isinstance`函数:用于检查对象是否为指定的实例。使用方法为`isinstance(object, classinfo)` - `hasattr`函数:用于检查对象是否具有指定的属性。使用方法为`hasattr(object, name)` - `getattr`函数:用于获取对象的属性值。使用方法为`getattr(object, name[, default])` - `setattr`函数:用于设置对象的属性值。使用方法为`setattr(object, name, value)` 以上是Python中定义和使用的基本语法和函数,掌握了这些知识后,可以尝试设计自己的并应用到实际的编程项目中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值