zoukankan      html  css  js  c++  java
  • python面向对象-1方法、构造函数

    类是指:描述一种事物的定义,是个抽象的概念 
    实例指:该种事物的一个具体的个体,是具体的东西 

    打个比方: 
    “人”是一个类。“张三”是人类的一个具体例子 

    在编程时也是同样的道理,你先自己定义一个“类”,当你需要用时,用“类”的定义来创造一个具体的例子。 

    用类的定义来创建一个实例,就叫做类的实例化。
    实例化过程就是调用类的构造函数,完成该实例的数据分配

    下面用一个洗衣机的例子来演示:

    这个是一个简单的手动洗衣机 w 实例化了Washer类:

     1 #class Washer:
     2 class Washer:#定义一个Washer类
     3 
     4     def __init__(self): #这是定义类的构造函数,也是一个特殊的实例方法
     5         self.water=0   #实例的属性(变量)
     6         self.scour=0
     7 
     8     def add_water(self,water):#实例的方法(函数),可以接受实例化后传过来的参数给类内实例变量,又因为实例继承了类的属性和方法,所以
     9     #相当于传递给了类的实例化对象的实例变量
    10         print('Add water:',water)
    11         self.water=water#在类的方法内引用实例变量用 self.属性名
    12 
    13     def add_scour(self,scour):
    14         self.scour=scour
    15         print('Add scour:',scour)
    16 
    17     def start_wash(self):
    18         print('Start wash...')
    19         
    20 if __name__=='__main__':
    21     w=Washer()#类的实例化
    22     w.add_water(10)#传递参数到实例变量
    23     w.add_scour(2)
    24     w.start_wash()

    执行结果:

    类内定义实例方法需要手动加上self参数(如第4行),但在类实例化后调用这个方法时不必手动加self参数,python会自动添加,如第22行。

    实例化方法是 w=Washer()  ,可以看出需要在类后加一个括号。

    类外调用类内定义的实例方法可以 实例名.方法名() ,例如

    w.add_scour(2),必要的时候加上参数。

     下面改动一下程序,弄成半自动洗衣机,即在类的内部,方法之间相互调用。

    washa.py:

     1 class Washer:
     2 
     3     def __init__(self):
     4         self.water=0
     5         self.scour=0
     6 
     7     def set_water(self,water):
     8         self.water=water
     9         self.add_water()
    10 
    11     def set_scour(self,scour):
    12         self.scour=scour
    13         self.add_scour()#在类内调用函数,用 self.方法名
    14 
    15     def add_water(self):
    16         print('Add water:',self.water)
    17 
    18     def add_scour(self):
    19         print('Add scour:',self.scour)
    20 
    21     def start_wash(self):
    22         print('Start wash...')
    23         
    24 if __name__=='__main__':
    25     w=Washer()
    26     w.set_water(10)
    27     w.set_scour(2)
    28     w.start_wash()
    29     

    也可以改成:

     1 class Washer:
     2 
     3     def __init__(self):
     4         self.water=0
     5         self.scour=0
     6 
     7     def set_water(self,water):
     8         self.water=water        
     9 
    10     def set_scour(self,scour):
    11         self.scour=scour        
    12 
    13     def add_water(self):
    14         print('Add water:',self.water)
    15 
    16     def add_scour(self):
    17         print('Add scour:',self.scour)
    18 
    19     def start_wash(self):
    20         self.add_water()
    21         self.add_scour()
    22         print('Start wash...')
    23         
    24 if __name__=='__main__':
    25     w=Washer()
    26     w.set_water(10)
    27     w.set_scour(2)
    28     w.start_wash()

    运行结果:


    做如下改动,用户可以不设置洗衣机加水和洗涤剂量也可以洗衣服:

     1 class Washer:
     2 
     3     def __init__(self):
     4         self.water=10#将实例属性修改为默认的标准洗衣程序需要的量
     5         self.scour=2
     6 
     7     def set_water(self,water):
     8         self.water=water        
     9 
    10     def set_scour(self,scour):
    11         self.scour=scour        
    12 
    13     def add_water(self):
    14         print('Add water:',self.water)
    15 
    16     def add_scour(self):
    17         print('Add scour:',self.scour)
    18 
    19     def start_wash(self):
    20         self.add_water()
    21         self.add_scour()
    22         print('Start wash...')
    23         
    24 if __name__=='__main__':
    25     w=Washer()
    26 ##    w.set_water(10) #这两行代码注释掉,代表用户不必设置水和洗涤剂量
    27 ##    w.set_scour(2)
    28     w.start_wash()
    29     

    但是这样,只能加入10L水和2L洗涤剂,不好,要改进。用到构造函数。


     1 class Washer:
     2 
     3     def __init__(self,water=10,scour=2):
     4         self.water=water
     5         self.scour=scour
     6 
     7     def set_water(self,water):
     8         self.water=water        
     9 
    10     def set_scour(self,scour):
    11         self.scour=scour        
    12 
    13     def add_water(self):
    14         print('Add water:',self.water)
    15 
    16     def add_scour(self):
    17         print('Add scour:',self.scour)
    18 
    19     def start_wash(self):
    20         self.add_water()
    21         self.add_scour()
    22         print('Start wash...')
    23         
    24 if __name__=='__main__':
    25     w=Washer()
    26     w.start_wash()
    27 
    28     wb=Washer(100,10)
    29     wb.start_wash()
    30 
    31     wc=Washer(100,10)
    32     wc.set_water(50)
    33     wc.set_scour(5)
    34     wc.start_wash()
    35 
    36     
    37 
    38     
    39     

    运行结果: 

    构造函数可以使类在实例化时实例对象更加丰富,具有实例化不同种类的实例的作用。

  • 相关阅读:
    jquery和js常用的遍历数组的方法
    jquery获取某组件距离边框的距离
    jquery获取鼠标移动时的位置
    springboot整合websocket实现登录挤退现象
    使用Gitblit搭建Git服务器教程
    Gradle史上最详细解析
    推荐5个提高Java开发效率的工具
    JBoss7详细配置指南
    XMLBEANS的使用总结
    使用XMLBeans 处理XML
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/6945717.html
Copyright © 2011-2022 走看看