1. 类的创建并实例化

类的定义:在Python中,类通过 class 关键字定义。按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。下面是一个简单的类创建并实例化:

class Person(object):passsqz = Person()

属性赋值:由于Python是动态语言,对每一个实例,都可以直接给他们的属性赋值:

sqz.name = 'Sunqz'
sqz.age = 18

属性初始化:虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性。在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:

class Person(object):def __init__(self, name, gender, birth, **kw):self.name = nameself.gender = genderself.birth = birthfor key, value in kw.items():       # **kw 表示接受任意长度参数,以字典形式存储setattr(self, key, value)       # 使用 setattr(self, name, ***) 设置属性sqz = Person('Sun qz', 'Male', '1996-1-1', job='Student')print sqz.name
print sqz.job

属性访问限制:Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头__**,该属性就无法被外部访问。

class Person(object):def __init__(self, name, score):self.name = nameself.__score = scorep = Person('Bob', 59)print p.name
print p.__score  # 报错AttributeError: 'Person' object has no attribute '__score' Bob

但是,如果一个属性以"__xxx__“的形式定义,那它又可以被外部访问了,以”__xxx__“定义的属性在Python 的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用”__xxx__"定义。

以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问

创建类属性:绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份

class Person(object):count = 0                   # 类属性def __init__(self, name):self.name = namePerson.count += 1       # 通过类名字调用类属性并修改,所有实例进行访问都是修改之后的值p1 = Person('Bob')
print Person.count              # 1  正常调用类属性
print p1.count                  # 1  为实例创建了一个和类属性同名的属性
p1.count += 1
print p1.count      # 2  修改实例属性,对类属性无影响,通过实例访问同名属性,优先访问的是实例属性
print Person.count              # 1

定义实例方法:实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样。在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。

class Person(object):def __init__(self, name, score):self.name = nameself.__score = score   # 定义一个私有属性,外部不可访问def get_grade(self):       # 通过函数访问实例内部私有属性if self.__score >= 90:return 'A' elif self.__score>=60:return 'B'else: return 'C'p1 = Person('Bob', 90)
print p1.get_grade()

定义类方法:和属性类似,方法也分实例方法和类方法。

class Person(object):__count = 0          # 定义私有的类属性@classmethoddef how_many(cls):   # 定义类方法return cls.__countdef __init__(self, name):self.name = namePerson.__count = Person.__count + 1print Person.how_many()
p1 = Person('Bob')
print Person.how_many()

通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count

Python 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法相关推荐

  1. 【手把手教你】Python面向对象编程入门及股票数据管理应用实例

    1 前言 一般而言,在学习或练习python的初级阶段,在Jupyter Notebook(spyder或pycharm)上进行逐条执行语句和代码,这样可以起到交互的良好效果.但是如果要进行大一点的项 ...

  2. Python面向对象编程中的创建类及其实例化对象等方法.....【超级详细】

  3. (转)Python 面向对象编程(一)

    Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程.下面就来了解一下如何在Python中进行对象编程. 一.如何定义一个类 在进行python面向对象 ...

  4. Python 面向对象编程

    python是一门解释语音,但是它是面向对象的,可以进行对象编程.在进行python面向对象编程之前,先来了解几个术语:类.类对象.实例对象.属性.函数和方法. 一.如何定义一个类? class pe ...

  5. Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合

    Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...

  6. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  7. c++全局类对象_史上最全 Python 面向对象编程

    面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...

  8. python面向对象编程中方法和属性_Python面向对象编程中关于类和方法的学习笔记...

    Python面向对象编程中关于类和方法的学习笔记 类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下 类和实例 pytho ...

  9. python面向对象编程中_Python面向对象编程中关于类和方法

    类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...

  10. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

最新文章

  1. 调用script方法_自己撸一个代码生成器输入参数和方法
  2. html5模拟keyup事件
  3. Nginx+Tomcat负载均衡
  4. PROTEUS串口仿真遇到的BUG(转载)
  5. 安卓系统双屏异显_Android实现双屏异显
  6. Web 安全与 Rational AppScan 入门
  7. Mac查看Python安装路径和版本
  8. 一位 90 后程序员的自述:如何从年薪 3W 到 30W
  9. java httppost raw_httpclient raw请求
  10. url伪静态、url重写
  11. java web课程报告_java web课程设计报告.doc
  12. 获得android手机root权限,安卓手机root助手教你一键获取手机root权限
  13. 生成器(generator)理解
  14. Tomcat服务读取静态图片/静态资源
  15. BZOJ4049 : [Cerc2014] Mountainous landscape
  16. Linux系统的权限管理
  17. MaiPDF让你的数据安全得到保护
  18. MIC(最大信息系数)
  19. 由Elasticsearch的API命令,引发的金融业生产故障
  20. 4.3 移位寄存器的实现和应用

热门文章

  1. 游戏缺少index.html,index.html
  2. linux kill命令详解
  3. Spring Boot(09)——使用SpringMVC
  4. mysql 基本操作
  5. Oracle_零度笔记
  6. 使用的postman心得
  7. Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
  8. sublime text全程指南【转载】
  9. Git 常用命令和教程
  10. 处理器管理与进程管理