Python 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法
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 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法相关推荐
- 【手把手教你】Python面向对象编程入门及股票数据管理应用实例
1 前言 一般而言,在学习或练习python的初级阶段,在Jupyter Notebook(spyder或pycharm)上进行逐条执行语句和代码,这样可以起到交互的良好效果.但是如果要进行大一点的项 ...
- Python面向对象编程中的创建类及其实例化对象等方法.....【超级详细】
- (转)Python 面向对象编程(一)
Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程.下面就来了解一下如何在Python中进行对象编程. 一.如何定义一个类 在进行python面向对象 ...
- Python 面向对象编程
python是一门解释语音,但是它是面向对象的,可以进行对象编程.在进行python面向对象编程之前,先来了解几个术语:类.类对象.实例对象.属性.函数和方法. 一.如何定义一个类? class pe ...
- Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合
Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...
- 《Python面向对象编程指南》——1.2 基类中的__init__()方法
本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...
- c++全局类对象_史上最全 Python 面向对象编程
面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...
- python面向对象编程中方法和属性_Python面向对象编程中关于类和方法的学习笔记...
Python面向对象编程中关于类和方法的学习笔记 类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下 类和实例 pytho ...
- python面向对象编程中_Python面向对象编程中关于类和方法
类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...
- Python面向对象编程:类继承和其衍生术语
Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...
最新文章
- 调用script方法_自己撸一个代码生成器输入参数和方法
- html5模拟keyup事件
- Nginx+Tomcat负载均衡
- PROTEUS串口仿真遇到的BUG(转载)
- 安卓系统双屏异显_Android实现双屏异显
- Web 安全与 Rational AppScan 入门
- Mac查看Python安装路径和版本
- 一位 90 后程序员的自述:如何从年薪 3W 到 30W
- java httppost raw_httpclient raw请求
- url伪静态、url重写
- java web课程报告_java web课程设计报告.doc
- 获得android手机root权限,安卓手机root助手教你一键获取手机root权限
- 生成器(generator)理解
- Tomcat服务读取静态图片/静态资源
- BZOJ4049 : [Cerc2014] Mountainous landscape
- Linux系统的权限管理
- MaiPDF让你的数据安全得到保护
- MIC(最大信息系数)
- 由Elasticsearch的API命令,引发的金融业生产故障
- 4.3 移位寄存器的实现和应用