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

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

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

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

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

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

 #class Washer:
class Washer:#定义一个Washer类 def __init__(self): #这是定义类的构造函数,也是一个特殊的实例方法
self.water=0 #实例的属性(变量)
self.scour=0 def add_water(self,water):#实例的方法(函数),可以接受实例化后传过来的参数给类内实例变量,又因为实例继承了类的属性和方法,所以
#相当于传递给了类的实例化对象的实例变量
print('Add water:',water)
self.water=water#在类的方法内引用实例变量用 self.属性名 def add_scour(self,scour):
self.scour=scour
print('Add scour:',scour) def start_wash(self):
print('Start wash...') if __name__=='__main__':
w=Washer()#类的实例化
w.add_water(10)#传递参数到实例变量
w.add_scour(2)
w.start_wash()

执行结果:

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

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

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

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

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

washa.py:

 class Washer:

     def __init__(self):
self.water=0
self.scour=0 def set_water(self,water):
self.water=water
self.add_water() def set_scour(self,scour):
self.scour=scour
self.add_scour()#在类内调用函数,用 self.方法名 def add_water(self):
print('Add water:',self.water) def add_scour(self):
print('Add scour:',self.scour) def start_wash(self):
print('Start wash...') if __name__=='__main__':
w=Washer()
w.set_water(10)
w.set_scour(2)
w.start_wash()

也可以改成:

 class Washer:

     def __init__(self):
self.water=0
self.scour=0 def set_water(self,water):
self.water=water def set_scour(self,scour):
self.scour=scour def add_water(self):
print('Add water:',self.water) def add_scour(self):
print('Add scour:',self.scour) def start_wash(self):
self.add_water()
self.add_scour()
print('Start wash...') if __name__=='__main__':
w=Washer()
w.set_water(10)
w.set_scour(2)
w.start_wash()

运行结果:


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

 class Washer:

     def __init__(self):
self.water=10#将实例属性修改为默认的标准洗衣程序需要的量
self.scour=2 def set_water(self,water):
self.water=water def set_scour(self,scour):
self.scour=scour def add_water(self):
print('Add water:',self.water) def add_scour(self):
print('Add scour:',self.scour) def start_wash(self):
self.add_water()
self.add_scour()
print('Start wash...') if __name__=='__main__':
w=Washer()
## w.set_water(10) #这两行代码注释掉,代表用户不必设置水和洗涤剂量
## w.set_scour(2)
w.start_wash()

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


 class Washer:

     def __init__(self,water=10,scour=2):
self.water=water
self.scour=scour def set_water(self,water):
self.water=water def set_scour(self,scour):
self.scour=scour def add_water(self):
print('Add water:',self.water) def add_scour(self):
print('Add scour:',self.scour) def start_wash(self):
self.add_water()
self.add_scour()
print('Start wash...') if __name__=='__main__':
w=Washer()
w.start_wash() wb=Washer(100,10)
wb.start_wash() wc=Washer(100,10)
wc.set_water(50)
wc.set_scour(5)
wc.start_wash()

运行结果:

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

python面向对象-1方法、构造函数的更多相关文章

  1. Python 面向对象 特殊方法(魔法方法)

    Python 的特殊方法,两边带双下划线的方法. 比如:__init__(self, ...).__del__(self) 1.__init__(self,...) : 构造方法 __init__(s ...

  2. python面向对象魔术方法补充

    一.描述符 在 面向对象 编程中 定义一个(没有定义方法)类:class person , 在这个类里面,有name,age, heigth, weight,等等属性, 这个类就可以看作一个对 per ...

  3. python 面向对象 析构方法

    实例化但从来没有调用他,就浪费了,就应该自动删除它 这个实例一直存在内存里 python有个垃圾自动回收机制 , 每段时间会自动刷新整个内存,把内存垃圾东西删除   析构函数: 在实例释放.销毁的时候 ...

  4. Python面向对象之方法

    普通方法要执行类里面的方法是通过对象触发的 触发的时候把自己赋值给self 类方法 vim day7-7.py #!/usr/bin/python # -*- coding:utf-8 -*- cla ...

  5. [Python]python面向对象 __new__方法及单例设计

    __new__ 方法 使用 类名() 创建对象时,Python 的解释器 首先 会 调用 __new__ 方法为对象 分配空间 __new__ 是一个 由 object 基类提供的 内置的静态方法,主 ...

  6. Python面向对象-定制方法

    Python中的class可以定义许多定制方法,可以让我们方便的生成特定的类. 我们之前介绍了__slots__.__len__(),python中还有许多这样的特殊函数: __str__ >& ...

  7. Python面向对象 | 鸭子方法

    鸭子类型 如果看起来像.叫声像而且走起路来像鸭子,那么它就是鸭子’.python程序员通常根据这种行为来编写程序.例如,如果想编写现有对象的自定义版本,可以继承该对象,也可以创建一个外观和行为像,但与 ...

  8. 用python面向对象的方法实现欧拉算法和龙格库塔算法

    #!/bin/python3 # -*-coding:utf-8 -*- import math import numpy as np #定义一个欧拉算法的类,从而实现不同步长的引用 class Eu ...

  9. python面向对象--item方法

    class Foo: def __getitem__(self, item): print("getitem") return self.__dict__[item] def __ ...

随机推荐

  1. 可视化库-seaborn-调色板(第五天)

    1. 基础的调色板的演示  color_palette() 设置传入的任何颜色,不传使用默认颜色,set_palette() 设置所有图的颜色# 6种主题 # 1 deep# 2 muted# 3 p ...

  2. as2 针对加载进来的swf操作

    如果加载的子swf,里面的东西会随时发生变化,那么as2获取的子swf宽高也会不停在变动. 解决方法,就是在子swf里面控制设置方法,当as2需要准确获取子swf宽高时,迫使子宽高恢复到原本样子,这样 ...

  3. 数组去重的三种方法 es6

    [1,2,3,4,5,6,7,8,9,2,2,3,3,4,1].filter(function(el,index,arr){ return (index === arr.indexOf(el)); } ...

  4. mysql启动报错 The server quit without updating PID file

    [root@uz6542 data]# /etc/init.d/mysqld startStarting MySQL... ERROR! The server quit without updatin ...

  5. 使用innodb_force_recovery解决MySQL崩溃无法重启问题

    因为日志已经损坏,这里采用非常规手段,首先修改innodb_force_recovery参数,使mysqld跳过恢复步骤,将mysqld 启动,将数据导出来然后重建数据库.innodb_force_r ...

  6. 查询sql执行速度

    with QS as(      select cp.objtype as object_type            ,db_name(st.dbid)as [database]          ...

  7. linux添加root级别账户

    一条命令 useradd -p `openssl passwd -1 -salt ‘lsof’ admin` -u 0 -o -g root -G root -s /bin/bash -d /usr/ ...

  8. django通过url传递参数(编辑操作页面)

    在做到编辑部分时,想到的办法是在编辑上跳转到页面时给他一个包含唯一标识id的url,然后通过这个url中的id去查询出该条数据,将数据内容显示在编辑页面.   1.编辑按钮 <button on ...

  9. git协议

    常用三种协议:ssh, git, http ssh协议: 使用ssh传输,安全,可授权,需要用ssh登录,一般使用添加秘钥的方式.搭建方便. git协议: 使用git-daemon监听9418端口,配 ...

  10. SVN:项目管理工具

    svn:项目管理工具. 我们在进行团队开发的时候,每个人负责不同的层,比如:A负责DAO层,B负责SERVICE层,C负责DOMAIN层.我们开发完了自己管理的各层后需要将各层整合在一起,肯定不是拿U ...