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岁
    名字叫 小黄 的小狗睡着了
    
  • 相关阅读:
    thinkphp5 tp5 命名空间 报错 Namespace declaration statement has to be the very first statement in the script
    开启 php 错误 提示 php-fpm 重启 nginx 500错误 解决办法 wdlinux lnmp 一键包 php脚本无法解析执行
    js 设置 cookie 定时 弹出层 提示层 下次访问 不再显示 弹窗 getCookie setCookie setTimeout
    php 二维数组 转字符串 implode 方便 mysql in 查询
    nginx 重启 ps -ef|grep nginx kill -HUP 主进程号
    jquery bootstrap help-block input 表单 提示 帮助 信息
    jquery 倒计时 60秒 短信 验证码 js ajax 获取
    jQuery如何获取同一个类标签的所有的值 遍历
    linux下C语言文件操作相关函数
    gcc,gdb用法
  • 原文地址:https://www.cnblogs.com/zhangshengdong/p/12497932.html
Copyright © 2011-2022 走看看