当前位置: 首页 > news >正文

与网站建设有关的招标文件中文域名 网站

与网站建设有关的招标文件,中文域名 网站,自建网站教程视频,杭州网站建设哪家设计好Python 面向对象 Python从设计之初就已经是一门面向对象的语言#xff0c;正因为如此#xff0c;在Python中创建一个类和对象是很容易的。现在介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言#xff0c;那你可能需要先了解一些面向对象语言的一些基本特… Python 面向对象 Python从设计之初就已经是一门面向对象的语言正因为如此在Python中创建一个类和对象是很容易的。现在介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言那你可能需要先了解一些面向对象语言的一些基本特征在头脑里头形成一个基本的面向对象的概念这样有助于你更容易的学习Python的面向对象编程。 接下来我们先来简单的了解下面向对象的一些基本特征。 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员类变量或者实例变量用于处理类及其实例对象的相关的数据。 方法重写如果从父类继承的方法不能满足子类的需求可以对其进行改写这个过程叫方法的覆盖override也称为方法的重写。 实例变量定义在方法中的变量只作用于当前实例的类。 继承即一个派生类derived class继承基类base class的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如有这样一个设计一个Dog类型的对象派生自Animal类这是模拟是一个is-a关系例图Dog是一个Animal。 实例化创建一个类的实例类的具体对象。 方法类中定义的函数。 对象通过类定义的数据结构实例。对象包括两个数据成员类变量和实例变量和方法。 创建类 使用class语句来创建一个新类class之后为类的名称并以冒号结尾如下实例: class ClassName:类的帮助信息 #类文档字符串class_suite #类体 类的帮助信息可以通过ClassName.__doc__查看。 class_suite 由类成员方法数据属性组成。 实例 以下是一个简单的Python类实例: 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-classEmployee:所有员工的基类empCount 0def__init__(self,name,salary):self.name nameself.salary salaryEmployee.empCount 1defdisplayCount(self):printTotal Employee %d % Employee.empCountdefdisplayEmployee(self):printName :,self.name,, Salary:,self.salary empCount 变量是一个类变量它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。 第一种方法__init__()方法是一种特殊的方法被称为类的构造函数或初始化方法当创建了这个类的实例时就会调用该方法 self 代表类的实例self 在定义类的方法时是必须有的虽然在调用时不必传入相应的参数。 self代表类的实例而非类 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。 classTest:defprt(self):print(self)print(self.__class__)t Test()t.prt() 以上实例执行结果为 __main__.Test instance at 0x10d066878 __main__.Test 从执行结果可以很明显的看出self 代表的是类的实例代表当前对象的地址而 self.class 则指向类。 self 不是 python 关键字我们把他换成 runoob 也是可以正常执行的: 实例 classTest:defprt(runoob):print(runoob)print(runoob.__class__)t Test()t.prt() 以上实例执行结果为 __main__.Test instance at 0x10d066878 __main__.Test 创建实例对象 实例化类其他编程语言中一般用关键字 new但是在 Python 中并没有这个关键字类的实例化类似函数调用方式。 以下使用类的名称 Employee 来实例化并通过 __init__ 方法接受参数。 创建 Employee 类的第一个对象 emp1 Employee(Zara, 2000) 创建 Employee 类的第二个对象 emp2 Employee(Manni, 5000) 访问属性 您可以使用点(.)来访问对象的属性。使用如下类的名称访问类变量: emp1.displayEmployee() emp2.displayEmployee() print Total Employee %d % Employee.empCount 完整实例 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-classEmployee:所有员工的基类empCount 0def__init__(self,name,salary):self.name nameself.salary salaryEmployee.empCount 1defdisplayCount(self):printTotal Employee %d % Employee.empCountdefdisplayEmployee(self):printName :,self.name,, Salary:,self.salary创建 Employee 类的第一个对象emp1 Employee(Zara,2000)创建 Employee 类的第二个对象emp2 Employee(Manni,5000)emp1.displayEmployee()emp2.displayEmployee()printTotal Employee %d % Employee.empCount 执行以上代码输出结果如下 Name : Zara ,Salary: 2000 Name : Manni ,Salary: 5000 Total Employee 2 你可以添加删除修改类的属性如下所示 emp1.age 7 # 添加一个 age 属性 emp1.age 8 # 修改 age 属性 del emp1.age # 删除 age 属性 你也可以使用以下函数的方式来访问属性 getattr(obj, name[, default]) : 访问对象的属性。 hasattr(obj,name) : 检查是否存在一个属性。 setattr(obj,name,value) : 设置一个属性。如果属性不存在会创建一个新属性。 delattr(obj, name) : 删除属性。 hasattr(emp1,age)# 如果存在 age 属性返回 True。getattr(emp1,age)# 返回 age 属性的值setattr(emp1,age,8)# 添加属性 age 值为 8delattr(empl,age)# 删除属性 age Python内置类属性 __dict__ : 类的属性包含一个字典由类的数据属性组成 __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块类的全名是__main__.className如果类位于一个导入模块mymod中那么className.__module__ 等于 mymod __bases__ : 类的所有父类构成元素包含了一个由所有父类组成的元组 Python内置类属性调用实例如下 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-classEmployee:所有员工的基类empCount 0def__init__(self,name,salary):self.name nameself.salary salaryEmployee.empCount 1defdisplayCount(self):printTotal Employee %d % Employee.empCountdefdisplayEmployee(self):printName :,self.name,, Salary:,self.salaryprintEmployee.__doc__:,Employee.__doc__printEmployee.__name__:,Employee.__name__printEmployee.__module__:,Employee.__module__printEmployee.__bases__:,Employee.__bases__printEmployee.__dict__:,Employee.__dict__ 执行以上代码输出结果如下 Employee.__doc__: 所有员工的基类 Employee.__name__: Employee Employee.__module__: __main__ Employee.__bases__: () Employee.__dict__: {__module__: __main__, displayCount: function displayCount at 0x10a939c80, empCount: 0, displayEmployee: function displayEmployee at 0x10a93caa0, __doc__: \xe6\x89\x80\xe6\x9c\x89\xe5\x91\x98\xe5\xb7\xa5\xe7\x9a\x84\xe5\x9f\xba\xe7\xb1\xbb, __init__: function __init__ at 0x10a939578} python对象销毁(垃圾回收) Python 使用了引用计数这一简单技术来跟踪和回收垃圾。 在 Python 内部记录着所有使用中的对象各有多少引用。 一个内部跟踪变量称为一个引用计数器。 当对象被创建时 就创建了一个引用计数 当这个对象不再需要时 也就是说 这个对象的引用计数变为0 时 它被垃圾回收。但是回收不是立即的 由解释器在适当的时机将垃圾对象占用的内存空间回收。 a 40 # 创建对象 40 b a # 增加引用 40 的计数 c [b] # 增加引用. 40 的计数del a # 减少引用 40 的计数 b 100 # 减少引用 40 的计数 c[0] -1 # 减少引用 40 的计数 垃圾回收机制不仅针对引用计数为0的对象同样也可以处理循环引用的情况。循环引用指的是两个对象相互引用但是没有其他变量引用他们。这种情况下仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充 垃圾收集器也会留心被分配的总量很大及未通过引用计数销毁的那些的对象。 在这种情况下 解释器会暂停下来 试图清理所有未引用的循环。 实例 析构函数 __del__ __del__在对象销毁的时候被调用当对象不再被使用时__del__方法运行 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-classPoint:def__init__(self,x0,y0):self.x xself.y ydef__del__(self):class_name self.__class__.__name__printclass_name,销毁pt1 Point()pt2 pt1pt3 pt1printid(pt1),id(pt2),id(pt3)# 打印对象的iddelpt1delpt2delpt3 以上实例运行结果如下 3083401324 3083401324 3083401324 Point 销毁 注意通常你需要在单独的文件中定义一个类 类的继承 面向对象的编程带来的主要好处之一是代码的重用实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。 需要注意的地方继承语法 class 派生类名基类名//... 基类名写在括号里基本类是在类定义的时候在元组之中指明的。 在python中继承中的一些特点 1在继承中基类的构造__init__()方法不会被自动调用它需要在其派生类的构造中亲自专门调用。 2在调用基类的方法时需要加上基类的类名前缀且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数 3Python总是首先查找对应类型的方法如果它不能在派生类中找到对应的方法它才开始到基类中逐个查找。先在本类中查找调用的方法找不到才去基类中找。 如果在继承元组中列了一个以上的类那么它就被称作多重继承 。 语法 派生类的声明与他们的父类类似继承的基类列表跟在类名之后如下所示 class SubClassName (ParentClass1[, ParentClass2, ...]):Optional class documentation stringclass_suite 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-classParent:# 定义父类parentAttr 100def__init__(self):print调用父类构造函数defparentMethod(self):print调用父类方法defsetAttr(self,attr):Parent.parentAttr attrdefgetAttr(self):print父类属性 :,Parent.parentAttrclassChild(Parent):# 定义子类def__init__(self):print调用子类构造方法defchildMethod(self):print调用子类方法 child methodc Child()# 实例化子类c.childMethod()# 调用子类的方法c.parentMethod()# 调用父类方法c.setAttr(200)# 再次调用父类的方法c.getAttr()# 再次调用父类的方法 以上代码执行结果如下 调用子类构造方法 调用子类方法 child method 调用父类方法 父类属性 : 200 你可以继承多个类 class A: # 定义类 A .....class B: # 定义类 B .....class C(A, B): # 继承类 A 和 B ..... 你可以使用issubclass()或者isinstance()方法来检测。 issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类语法issubclass(sub,sup) isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。 方法重写 如果你的父类方法的功能不能满足你的需求你可以在子类重写你父类的方法 实例 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-classParent:# 定义父类defmyMethod(self):print调用父类方法classChild(Parent):# 定义子类defmyMethod(self):print调用子类方法c Child()# 子类实例c.myMethod()# 子类调用重写方法 执行以上代码输出结果如下 调用子类方法 基础重载方法 下表列出了一些通用的功能你可以在自己的类重写 序号 方法, 描述 简单的调用 1 __init__ ( self [,args...] ) 构造函数 简单的调用方法: obj className(args) 2 __del__( self ) 析构方法, 删除一个对象 简单的调用方法 : del obj 3 __repr__( self ) 转化为供解释器读取的形式 简单的调用方法 : repr(obj) 4 __str__( self ) 用于将值转化为适于人阅读的形式 简单的调用方法 : str(obj) 5 __cmp__ ( self, x ) 对象比较 简单的调用方法 : cmp(obj, x) 运算符重载 Python同样支持运算符重载实例如下 实例 #!/usr/bin/pythonclassVector:def__init__(self,a,b):self.a aself.b bdef__str__(self):returnVector (%d, %d) % (self.a,self.b)def__add__(self,other):returnVector(self.a other.a,self.b other.b)v1 Vector(2,10)v2 Vector(5,-2)printv1 v2 以上代码执行结果如下所示: Vector(7,8) 类属性与方法 类的私有属性 __private_attrs两个下划线开头声明该属性为私有不能在类的外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs。 类的方法 在类的内部使用 def 关键字可以为类定义一个方法与一般函数定义不同类方法必须包含参数 self,且为第一个参数 类的私有方法 __private_method两个下划线开头声明该方法为私有方法不能在类地外部调用。在类的内部调用self.__private_methods 实例 #!/usr/bin/python# -*- coding: UTF-8 -*-classJustCounter:__secretCount 0# 私有变量publicCount 0# 公开变量defcount(self):self.__secretCount 1self.publicCount 1printself.__secretCountcounter JustCounter()counter.count()counter.count()printcounter.publicCountprintcounter.__secretCount# 报错实例不能访问私有变量 Python 通过改变名称来包含类名: 1 2 2 Traceback (most recent call last):File test.py, line 17, in moduleprint counter.__secretCount # 报错实例不能访问私有变量 AttributeError: JustCounter instance has no attribute __secretCount Python不允许实例化的类访问私有数据但你可以使用 object._className__attrName 访问属性将如下代码替换以上代码的最后一行代码 ......................... print counter._JustCounter__secretCount 执行以上代码执行结果如下 1 2 2 2 单下划线、双下划线、头尾双下划线说明 __foo__: 定义的是特列方法类似 __init__() 之类的。 _foo: 以单下划线开头的表示的是 protected 类型的变量即保护类型只能允许其本身与子类进行访问不能用于from module import * __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
http://www.pierceye.com/news/451255/

相关文章:

  • 吉林省建设厅证件查询网站网站不备案什么意思
  • 怎么查wordpress主题鞍山seo优化
  • 文字网站和图片网站哪个难做大城县建设局网站
  • 网站的二级目录是什么怎么把网站和域名绑定
  • 佛山营销网站建设wordpress请求超时
  • wordpress今天更新文章数漳州网站优化
  • 开发公司房产销售合同中必须明确哪些事项?seo网站推广全程实例
  • asp网站水印支除网络营销与市场营销的关系
  • 方圆网 网站建设wordpress 首页 不显示归档
  • 网站关键词怎么快速上排名wordpress极慢
  • 摄影网站建站wordpress怎么改密码
  • 旅游网站制作过程百度收录查询入口
  • 简述企业网站建设的流程网站建设的需求分析报告
  • 做网络课程的网站聚美优品网站建设分析
  • 网站建设公司简介wordpress注册按钮
  • 网站的栏目建设在哪里惠州网
  • 免费建站模板哪个好核酸造假7人枪毙视频
  • 一手房哪个网站做信息效果好微信小程序打不开
  • 建设网站图片素材包头怎样做网站
  • 网站内容建设与管理90设计app下载
  • 怎么做优惠卷网站公司做网站大概多少钱
  • 哪些网站是单页面应用程序在线做网站流程
  • 公司网站设计维护官方网站建设需要做哪些东西
  • 网站被k还能不能在百度做推广wordpress主题网址导航葬爱
  • 成都网站制作和建设辽阳北京网站建设
  • 合肥金融网站设计网页制作工具分哪两类
  • 专业营销型网站定制wordpress菜单绑定模板
  • 网站建设公司找哪家好石家庄网站改版
  • 建立一个网站要多久网页界面ps制作步骤
  • 珠海网站建设费用自己做网站切入地图