东瑜

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  135 随笔 :: 0 文章 :: 10 评论 :: 21万 阅读

作者:@张扶摇
本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhangshengdong/p/12497932.html


目录

Python对象
对象的内置方法
__init__方法
__str__方法
对象的多态
对象的封装
对象的继承

之前介绍了函数。对象代表了什么。可以称为“一篮子”计划,把数据属性和方法集合在一起,汇总成一个对象(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岁
名字叫 小黄 的小狗睡着了


感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接
posted on   东瑜  阅读(200)  评论(0编辑  收藏  举报
\\页脚html代码
点击右上角即可分享
微信分享提示