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,所以开发者只需要传递后面的参数即可

  • 相关阅读:
    内存泄漏 Memory Leaks 内存优化 MD
    Handler Thread 内部类引起内存泄露分析
    为什么不取消注册BroadcastReceiver会导致内存泄漏
    WebChromeClient 简介 API 案例
    WebViewClient 简介 API 案例
    java.net.URI 简介 文档 API
    android.net.Uri 简介 API
    RV 多样式 MultiType 聊天界面 消息类型 MD
    JS函数声明与定义,作用域,函数声明与表达式的区别
    CSS中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
  • 原文地址:https://www.cnblogs.com/xiaoyafei/p/8744954.html
Copyright © 2011-2022 走看看