zoukankan      html  css  js  c++  java
  • 12-面向对象1

    定义类

    定义一个类,格式如下:

    class 类名:

      方法列表

    demo:定义一个Car类

    In [1]: #定义一个Car类
    
    In [2]: class Car():
       ...:     #方法
       ...:     def getCarInfo(self):
       ...:         print('车轮的数量是:%d,颜色是:%s'%(self.wheelNum,self.color))
       ...:     def move(self):
       ...:         print('车正在移动...')

    说明:

      1.定义类时有2种,新式类和经典类,上面的Car为经典类,如果Car(object)则为新式类;

      2.类名的命名规则为“大驼峰”

    创建对象

    刚刚我们已经定义了一个Car类,就好比我们有了车子的图纸,那么接下来就需要交给生产工人们去创造了

    在python中,可以根据已经定义的类去创建出一个一个的对象,创建对象的格式为:

      对象名 = 类名()

    创建对象demo:

    In [1]: #定义一个Car类
    
    In [2]: class Car():
       ...:     #方法
       ...:     def getCarInfo(self):
       ...:         print('车轮的数量是:%d,颜色是:%s'%(self.wheelNum,self.color))
       ...:     def move(self):
       ...:         print('车正在移动...')
       ...:         
    
    In [3]: #创建一个对象,并用变量BMW来保存它的引用
    
    In [4]: BMW =  Car()
    
    In [5]: BMW.color = '黑色'
    
    In [6]: BMW.wheelNum = 4
    
    In [7]: BMW.move()
    车正在移动...

    In [8]: print(BMW.color)
    黑色

    In [9]: print(BMW.wheelNum)
    4

    总结:

      1)BMW = Car(),这样就产生了一个Car的实例对象,此时也可以通过实例对象BMW来访问属性或者方法

      2)第一次使用BMW.color = '黑色'表示给BMW这个对象添加属性,如果后面再次出现BMW.color = xxx ,则代表对属性进行修改

      3)BMW是一个对象,它拥有属性(数据)和方法(函数)

      4)当创建一个对象时,就是用一个模子,来制造的一个实物

    __init__方法

    在上一节的demo中,我们已经给BMW这个对象添加2个属性,wheelNum和color,试想如果再创建一个对象的话,肯定也要对其添加属性,显然这样很费事,那么就需要有一个方法,在创建对象的时候,就顺便把这个对象的属性给设置了

    __init__方法

    <1>使用方法

    Class 类名:
        #初始化函数,用来完成一些默认的设定
        def __init__(self):
            pass

    <2>__init__方法的调用

     11 #定义汽车类          
     12 class Car():         
     13                      
     14     def __init__(self):                                                                             
     15         self.wheelNum = 4
     16         self.color = '黑色'
     17     def move(self):  
     18         print('车子在跑...')
     19                      
     20 #创建对象            
     21 BMW = Car()          
     22 print('车的颜色为:%s'%BMW.color)
     23 print('车轮胎数为:%d'%BMW.wheelNum)

    总结:

      当创建完Car对象后,在没有调用__init__()方法的前提下,BMW就默认拥有了2个属性,原因是__init__()方法在被创建后,就立刻被默认调用了

    想一想

    既然在创建完对象后__init__()方法已经被默认执行了,那么有没有办法让对象在调用__init__()方法的时候传递一些参数呢?如果可以,是怎么样传递的呢?

     11 #定义汽车类
     12 class Car():
     13  
     14     def __init__(self,wheelNum,color):
     15         self.wheelNum = wheelNum
     16         self.color = color
     17     def move(self):
     18         print('车子在跑...')
     19  
     20 #创建对象
     21 BMW = Car(4,'白色')                                                                                 
     22 print('车的颜色为:%s'%BMW.color)
     23 print('车轮胎数为:%d'%BMW.wheelNum)

    python3 test.py
    车的颜色为:白色
    车轮胎数为:4

    总结:

      1)__init__()方法,在创建一个对象的时候默认被调用,不需要手动调用

      2)__init__(self)中, 默认有1个参数名字为slef,如果再创建对象时传递了2个实参,那么__init__(self)中除了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)

      3)__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去

    魔法方法

    首先看一下以下代码:

     11 #定义汽车类
     12 class Car():
     13      
     14     def __init__(self,wheelNum,color):                                                              
     15         self.wheelNum = wheelNum
     16         self.color = color
     17     def move(self):
     18         print('车子在跑...')
     19      
     20 #创建对象
     21 BMW = Car(4,'白色') 
     22 print(BMW)    #这行代码即是将BMW使用print进行输出
     23 print('车的颜色为:%s'%BMW.color)
     24 print('车轮胎数为:%d'%BMW.wheelNum)

    得到的结果:

    python3 test.py
    <__main__.Car object at 0x7f2b87338940>   #这里看到的是创建出来的BMW对象在内存中的地址
    车的颜色为:白色
    车轮胎数为:4

    __str__()方法

     11 #定义汽车类         
     12 class Car():        
     13                     
     14     def __init__(self,wheelNum,color):
     15         self.wheelNum = wheelNum
     16         self.color = color
     17     def move(self): 
     18         print('车子在跑...')
     19                     
     20     def __str__(self):
     21         return "车子的颜色是:%s,轮胎数是:%d"%(self.color,self.wheelNum)                          
     22                    
     23 #创建对象           
     24 BMW = Car(4,'白色') 
     25 print(BMW)          
     26 print('车的颜色为:%s'%BMW.color) 
     27 print('车轮胎数为:%d'%BMW.wheelNum)

    总结:

      1)在python中方法名如果是__xxxx__()的, 那么就有特殊的功能,因此叫做“魔法”方法

      2)当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

    理解self

    看以下示例:

     11 #定义一个类 
     12 class Animal():      
     13             
     14     #方法   
     15     def __init__(self,name):         
     16         self.name = name             
     17             
     18     def printName(self):             
     19         print('名字为:%s'%(self.name))
     20             
     21 #定义一个函数
     22 def myPrint(animal): 
     23     animal.printName()
     24             
     25 dog1 = Animal('旺财')
     26 myPrint(dog1)
     27 dog2 = Animal('来福')
     28 myPrint(dog2) 

    运行结果:

    名字为:旺财
    名字为:来福

    总结:

      1)所谓的self,可以理解为自己

      2)可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思

      3)某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可

  • 相关阅读:
    UML简介
    Servlet过滤器基础及使用场景
    eclipse maven配置问题:org.apache.maven.archiver.mavenarchiver.getmanifest
    maven中的groupId和artifactId 区分
    Spring中的控制反转和依赖注入
    SQL语句、PL/SQL块和SQL*Plus命令之间的区别
    Mybatis核心类生命周期和管理
    MyBatis Generator 下划线转驼峰命名
    修改maven默认仓库(即repository)的路径
    MyBatis SqlSessionFactory的几种常见创建方式
  • 原文地址:https://www.cnblogs.com/xiaoyafei/p/8744954.html
Copyright © 2011-2022 走看看