`
_念-H
  • 浏览: 9470 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

5、面向对象高级编程

阅读更多

1、class绑定属性与方法

 

	#coding=utf-8
	# 类
	class Student(object):
		pass
	# 定义一个实例
	student = Student()
	# 绑定属性
	student.name = 'name'
	# 定义一个方法
	def grade():
		pass
	# 实例绑定方法,其他实例不能用该方法
	from types import MethodType
	student.grade = MethodType(grade,student,Student)
	# 类绑定方法,所有实例都可以调用
	Student.grade = MethodType(grade,None,Student)

	# 为了限制实例绑定属性
	class User(object):
		# 指定name可以被绑定,父类有指定也可以绑定
		__slots__ = ('name')
	user = User()
	user.name = 'name'  # 可以绑定
	user.sex = 'men'    # 错误,不能够绑定

 

2、使用装饰器

	#coding=utf-8
	class Student(object):
	# 属性是私有的
	# 类似getName,但调用时,直接.name
	@property
	def name(self):
		return self.__name
	# 类似serName,但调用时,直接.name = xxx
	@name.setter
	def name(self,name):
		self.__name = name

	#测试
	if __name__ == '__main__':
		student = Student()
		student.name = 'name'
		print student.name   # name

3、定制类

A:__str__

class Student(object):
		def init(self,name):
			self.name = name
		def __str__(self):
			print 'tihs is Student,name = %s',self.name
	student = Student('Array')
	print student             # this is Student,name = Array
	print Student('Array')    # this is Student,name = Array

B:__iter__,next() 用作类的迭代

	class Number(object):
		def __init__(self,n=0):
			self.n = n
		def __iter__(self):
			return self
		def next(self):
			self.n = self.n + 1
			if self.n >= 10:
				raise StopIteration
			return self.n
	# 测试
	number = Number()
	for n in number:
		print n
	# 结果 1 2 3 4 5 6 7 8 9

C:__getitem__ 可以通过下标显示

	class Number(object):
		def __init__(self,n=0):
			self.n = n
		def __getitem__(self,n):
			a,b = 1,1
			# 下标获取
			if isinstance(n,int):
				for m in range(n):
					a,b = b,a+b
				return a
			# 切片
			if isinstance(n,slice):
				l = []
				start = n.start
				stop = n.stop
				for m in range(stop):
					a,b = b,a+b
					if start <= m:
						l.append(a)
				return l
	# 测试
	number = Number()
	# 下标
	print number[2]	 # 2
	# 切片 [1,2,3,5,8,13,21,34,55,89]
	print number[0:10]

D:__getattr__避免调用不存在属性产生的异常

	class User(object):
		def __getattr__(self,attr):
			# 属性名是name 返回Array
			if 'name' == attr:
				return 'Array'
			# 其他属性,返回提示信息
			return 'no attr: %s' % attr
	# 测试
	user = User()
    print user.name  # Array
    print user.sex   # no attr:sex

 

4、动态创建类

A:type()

	# 使用type可以查看变量的类型,也可以动态创建类
	print (type(Student))	# <tpye 'type'> 类的类型就是type
	s = Student()
	print s 				# <type 'Student'>
	# 动态创建类
	# 定义一个函数
	#coding=utf-8
	def m1(self):
		print 'm1'
	def m2(self):
		print 'm2'
	# 创建类,并绑定函数
	# 参数1:类名
	# 参数2:继承的类,当只有一个时,用tuple写法
	# 参数3:类的方法名绑定函数名
	Test = type('Test',(object,),dict(f1 = m1,f2 = m2))
	# 测试
	t = Test()
	t.f1()  # m1
	t.f2()  # m2

 

B:metaclass() 待定

分享到:
评论

相关推荐

    PHP面向对象高级编程和设计—面向对象高级编程和设计模式

    **PHP面向对象高级编程**指的是在PHP 5及以上版本中,利用其强大的面向对象特性进行更复杂的编程。PHP 5引入了对象模型的重构,包括类、对象、继承、封装和多态等基本概念,同时也增加了如析构函数、抽象类、接口、...

    Java面向对象高级编程

    Java 面向对象高级编程 Java 面向对象高级编程是 Java 编程语言中的一个重要概念,通过继承和方法覆盖创建子类,并能够创建异类集合并使用多态。本资源摘要信息将详细介绍 Java 面向对象高级编程的概念、继承、方法...

    JavaScript面向对象高级编程

    ### JavaScript面向对象高级编程知识点概述 #### 面向对象编程(OOP) 1. **继承**:继承是OOP的核心概念之一,它允许我们创建一个类,该类继承了另一个类的属性和方法。继承机制是实现代码重用和创建类之间层次结构...

    Labview面向对象编程

    Labview面向对象编程是NI(National Instruments)的图形化编程环境Labview中的一种高级编程技巧,它借鉴了传统编程语言中的面向对象概念,如封装、继承和多态性,为Labview开发带来了更高的代码复用性和可维护性。...

    095_《Delphi5高级编程丛书之一:IDE与面向对象编程》(5/5)

    本书全面深入地介绍了Delphi 5的集成开发环境、基本编程技巧、项目管理、调试器、Object Pascal语言、动态链接库、与C++共享代码、面向对象编程、VCL的结构、Open Tools API、编写自己的元件和包等内容。Delphi 5是...

    Java面向对象精髓编程

    Java面向对象精髓编程是Java开发的核心概念,它涵盖了类、对象、封装、继承、多态等关键要素。本文将深入探讨这些概念,并结合实际案例,帮助初学者从零开始掌握Java编程。 首先,我们从“Hello, World!”开始。这...

    Delphi 5高级编程丛书之一IDE与面向对象编程

    Delphi 5高级编程丛书之一IDE与面向对象编程

    Python 3面向对象编程

    《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。, 《Python 3面向对象编程》不是Python 的入门书籍,适合...

    用C-语言实现面向对象编程.pdf

    用 C 语言实现面向对象编程,我曾经在嵌入式控制系统工作过,苦于嵌入式系统编程一直是 C 语言,而没法用 C++或其他高级 语言的面向对象方法编程。经过研究生的学习和探索,偶然间发现高焕堂老师写 OOPC(面向对象 C...

    第5章面向对象高级编程.ppt

    第5章面向对象高级编程.ppt

    C++面向对象高级编程笔记

    C++面向对象高级编程笔记

    c++高级编程 C++面向对象多线程编程

    c++高级编程 C++面向对象多线程编程 c++标准程序库.pdf

    PLC的面向对象编程

    尽管与高级编程语言在某些方面存在差异,但通过遵循Step7的编程标准,可以将程序结构和对象控制分开实现,从而形成清晰的程序架构体系。 2. 数据结构规划:在Step7中,应避免在类外部定义数据结构(UDT),而应在类...

    第16章 LabVIEW中的面向对象编程,labview面向对象的框架,LabView

    总之,LabVIEW的面向对象编程提供了更高级的编程模型,使得开发者能够构造复杂、模块化的系统。熟练掌握这些概念和技巧,将有助于提升LabVIEW项目的效率和质量。在实际工作中,结合良好的编程实践,如代码注释、模块...

    C++面向对象高效编程

    《C++面向对象高效编程》是一本深入探讨C++编程技术的著作,由Kayshav Dattatri撰写,中文版的PDF格式使得国内读者能够更好地理解其内容。这本书主要聚焦于利用C++的面向对象特性进行高效编程,是C++程序员提升技能...

    实验三Java面向对象高级编程.doc

    "Java面向对象高级编程实验报告" 本实验报告涵盖了Java面向对象高级编程的知识点,包括继承、多态、抽象类和接口等。实验目的旨在掌握Java面向对象编程技术,能够使用继承创立子类并实现方法覆盖,创立异类集合并...

    Python+3面向对象编程.

    《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。, 《Python 3面向对象编程》不是Python 的入门书籍,适合...

    Python3面向对象编程

    《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。 《Python 3面向对象编程》不是Python 的入门书籍,适合具有...

Global site tag (gtag.js) - Google Analytics