zoukankan      html  css  js  c++  java
  • 简说Python之面向对象

    之前介绍了函数。对象代表了什么。可以称为“一篮子”计划,把数据属性和方法集合在一起,汇总成一个对象(object)。在C++中,这个称为类的概念。

    Python对象

    对象可以比喻为一个物种,例如:狗,它有颜色,名字,年龄,种类等特性,它的行为动作,会吼,会跳,会睡觉等等。而对象=action+attribute

    举例:我们设置一个对象的属性和动作。

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class dog:
        def jump(self):
            print("名字叫",self.name,"的小狗跳起来了")
        def introduce(self):
            print("这只小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
      
    mydog = dog()                    #类实例化
    mydog.name ="小黄"                #设置name属性
    mydog.color = "棕色"              #设置color属性
    mydog.age = "8岁"                 #设置age属性
    mydog.jump()
    mydog.introduce()
    

    另存为object01.py,执行结果如下:

    G:Py>python object01.py
    名字叫 小黄 的小狗跳起来了
    这只小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
    

    上述结果,可以看出对象的一些属性,不用前期定义,可以在实例化之后。再设置属性。不用先前定义好,有别于其他语言。

    对象的内置方法

    __init__方法

    除了想之前那样,后面定义对象的属性。可以使用__init__方法,在创建一个类的实例的时候,通过传参的方式。用来初始化你要设置对象的属性值。

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class dog:
    	def __init__(self, name, color, age):
    		self.name = name
    		self.color = color
    		self.age = age
    
    	def jump(self):
    		print("名字叫",self.name,"的小狗跳起来了")
    	def introduce(self):
    		print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
      
    mydog = dog("小黄","棕色","8岁")
    mydog.jump()
    mydog.introduce()
    

    另存为object02.py,执行结果如下:

    G:Py>python object02.py
    名字叫 小黄 的小狗跳起来了
    这只初始化小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
    

    __str__方法

    如果不使用__str__方法,直接执行实例化,等到的效果如下:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class dog:
    	def __init__(self, name, color, age):
    		self.name = name
    		self.color = color
    		self.age = age
    
    	def jump(self):
    		print("名字叫",self.name,"的小狗跳起来了")
    	def introduce(self):
    		print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
      
    mydog = dog("小黄","棕色","8岁")
    print (mydog)
    
    执行的效果如下:
    G:Py>python object03.py
    <__main__.dog object at 0x000000000257CFC8>
    

    上面说明:实例在main主程序中,定义了一个dog对象,内存位置为:0x000000000257CFC8

    如果想显示其他内容,可以使用特殊方法__str__,如下:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class dog:
    	def __init__(self, name, color, age):
    		self.name = name
    		self.color = color
    		self.age = age
    	def __str__(self):
    		msg = "this object called:" +self.name
    		return msg
    mydog = dog("小黄","棕色","8岁")
    print (mydog)
    

    另存为:object04.py,得出如下的结果:

    G:Py>python object04.py
    this object called:小黄
    

    对象的多态

    多态(polymorphism),表示在不同的类里,有同名的方法。

    举例如下:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class Triangle:
    	def __init__(self, width, height):
    		self.width = width
    		self.height = height
    	def getArea(self):
    		area = self.width * self.height / 2.0
    		return area
    class Square:
    	def __init__(self, size):
    		self.size = size
    	def getArea(self):
    		area = self.size * self.size 
    		return area
    	
    myTriangle = Triangle(4,5)
    TriangleArea = myTriangle.getArea()
    print("三角形的面积为:",TriangleArea)
     
    mySquare = Square(4)
    SquareArea = mySquare.getArea()
    print("正方形的面积为:",SquareArea)
    

    另存为object05.py,结果如下:

    G:Py>python object05.py
    三角形的面积为: 10.0
    正方形的面积为: 16
    

    对象的封装

    由于抽象的原则,调用对象的时候,无需知道里面的细节。直接调用其对象的方法。等到想要的结果。如下:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class dog:
    	def setName(self,name):
    		self.name = name
    	def getName(self):
    		print("小狗的名字叫做:",self.name)
      
    mydog = dog()
    mydog.setName("小黑")
    mydog.getName()
    

    另存为:object06.py,执行结果如下:

    G:Py>python object06.py
    小狗的名字叫做: 小黑
    

    对象的继承

    代码的重用,派生了继承的思路。通过继承创建的类为:子类或者派生类。被继承的类称为:基类父类超类

    语法:

    class 派生类名(基类名)
        ...
    

    举例如下:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    class dog:
    	def __init__(self, name, color, age):
    		self.name = name
    		self.color = color
    		self.age = age
    
    	def jump(self):
    		print("名字叫",self.name,"的小狗跳起来了")
    	def introduce(self):
    		print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
    		
    class Zdog(dog):
    	def sleep(self):
    		print("名字叫",self.name,"的小狗睡着了")
      
    mydog = Zdog("小黄","棕色","8岁")      #调用父类的初始化方法
    mydog.introduce()                    #调用父类的introduce
    mydog.sleep()                        #调用子类的方法
    

    另存为:object07.py,执行效果如下:

    G:Py>python object07.py
    这只初始化小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
    名字叫 小黄 的小狗睡着了
    
  • 相关阅读:
    winform 利用属性在父、子窗体间传值
    .netweb页面间传值的整理
    微软原版sqlhelper
    oracle 实现 split 函数
    sql server通过exec sp_executesql @pagecountsql,N'@RecodeNum int output',@RecodeNum output 传参执行自定义@sql
    .net 对XML实例
    三级联动DropDownList
    Quickly and partly build&debug OOo on ubuntu
    反思
    完整的学习C++的读书路线图
  • 原文地址:https://www.cnblogs.com/zhangshengdong/p/12497932.html
Copyright © 2011-2022 走看看