2018.12.4python笔记(2.7-2.8)
2.7 面向对象介绍
面向过程和面向对象
面向过程和面向对象编程
- 面向过程编程:函数式编程,C程序等
- 面向对象编程:C++,Java,Python等
类和对象
类和对象:是面向对象中的两个重要概念
- 类:是对事物的抽象,比如:人类、球类
- 对象:是类的一个实例,比如:足球、篮球
实例说明: - 球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球实体出来。
为什么面向对象
面向对象的主要思想是:
- 封装
- 继承
- 多态
这种思想方便解决较为复杂的项目,且维护起来较为容易。
Python类定义
类定义:
类把需要的变量和函数组合成一起,这种包含称为“封装”
class A(object):
类的结构:
class 类名: 类名每个单词的首字母大写
成员变量 – 属性
成员函数 – 方法
类的创建
class MyClass(object):
def fun(self):
print “I am function”
类的方法中至少有一个参数self
例子
#!/usr/bin/python
class People(object): 创建一个类
color = 'Yellow' 定义类的属性
def think(self): 定义一个类的方法,self必须要加,说明这是一个类自己的方法
self.color = 'black' 可以给类的属性重新赋值
print "I am thinking"
print "i am %s man" % self.color 重新调用变量
ren = People() 将类实例化然后赋值给ren
print ren.color 实例化后的对象调用类的属性color
ren.think() 实例化后的对象调用类的方法
[root@salt-master ~]# python 3.py
Yellow
I am a thinker
I am black man
类由属性和方法组成,类的属性是对数据的封装,类的方法是对类的行为的封装。
- 成员变量 -- 静态属性
- 成员函数 -- 动态方法
创建对象的过程称之为实例化;当一个对象被创建后,包含三个方面的特性:对象句柄、属性和方法。
句柄用于区分不同的对象
对象的属性和方法与类中的成员变量和成员函数对应
obj = MyClass() //创建类的一个实例(对象)
通过对象来调用方法和属性
2.8 类的属性
类的属性按使用范围分为公有属性和私有属性,类的属性范围取决于属性的名称。
- 公有属性:在类中和类外都能调用的属性。
私有属性:不能在类外及被类以外的函数调用。
定义方式:以”__”双下划线开始的成员变量就是私有属性
可以通过instance._classname__attribute方式访问。 - 内置属性:由系统在定义类的时候默认添加的,由前后双下划线构成,dict, module。
#!/usr/bin/python
class People(object):
color = 'Yellow'
age = 30 这里定义私有属性 双下划线注意,这个属性只能在类的内部使用
def think(self):
print "I am a thinker"
self.color='black'
print "I am %s man" % self.color
print self.age 访问私有属性
ren = People()
print ren.color
ren.think()
#print ren.age 报错,在外部不能调用类的私有属性
如果要访问类的私有属性,可以把私有属性放在类的方法中,然后调用类的方法
第二种访问类的私有属性的方法 实例._类名__属性名 print ren._Peopleage 这种方法只建议在测试的时候使用,不建议在程序中使用
print ren.dict 直接访问类的内置属性 返回的将是 {'color': 'black'} 这个字典
也可以通过People.color 直接访问类的属性 print People.color
对象可以去修改类的属性 ren.color='white' 修改的是对象的属性,不会修改类原来的属性
类调用内置属性 People.dict
2.9 类的方法
方法的定义和函数一样,但是需要self作为第一个参数。
类方法为:
- 公有方法
- 私有方法
- 类方法
- 静态方法
公有方法:在类中和类外都能调用的方法。
def think(self):
print "I am a thinker"
self.color='black'
print "I am %s man" % self.color
print self.__age
上面就是一个公有方法
私有方法:不能被类的外部调用,在方法前面加上”__”双下划线就是私有方法。
#!/usr/bin/python
class People(object):
color = 'Yellow'
age = 30
def think(self):
print "I am a thinker"
self.color='black'
print "I am %s man" % self.color
print self.age
def test(self):
self.talk() 在内部来调用talk()方法
def __talk(self): 定义私有方法 print "I am talking with Tom"
jack = People()
jack.test()
jack.__talk() 报错 不能通过对象直接访问类的私有方法
self参数
用于区分函数和类的方法(必须有一个self),self参数表示执行对象本身。
类的方法
类方法:被classmethod()函数处理过的函数,能被类所调用,也能被对象所调用(是继承的关系)
def test(self):
print 'Testing....'
cm = classmethod(test) test方法被classmethod处理 然后赋给cm变量
People.cm() 类调用cm函数 就是调用了test方法 这种调用就是动态的 因为加载到内存里的是某个方法,通过类来调用方法是非常节省内存的
静态方法:相当于”全局函数”,可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义,静态方法没有”self”参数。
def test(): 静态方法没有self参数
print 'this is func'
sm = staticmethod(test) 使用staticmethod函数处理一下
People.sm() 类调用静态方法
静态方法调用的时候会把类中的所有方法都加载到内存中 静态比动态的速度要快一点
静态方法中使用 People.color来直接访问类的属性
装饰器: 可以使用装饰器来代替 classmethod() 和 staticmethod()函数
- @classmethod
- @staticmethod
@classmethod 加载装饰器,它只对它下一行的函数生效,说明他是一个类方法
def test(self):
print 'this is func'
- Python2.7 学习笔记 (三)—— 类,继承,重载
- Python2.7自学笔记4――定义函数
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(7)习题2.8 随机数组的三种生成算法
- 【Python2.7 学习笔记】函数(一)
- Python 2.7 学习笔记 模块和包
- django学习笔记(一):Python2.7 、Django1.2下载及安装
- Python2.7自学笔记2――列表
- python2.7学习笔记(5) ——函数
- python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)
- Python 2.7 学习笔记 异常处理
- caffe学习笔记——Windows7 64位+caffe+anaconda2.7+python接口配置
- Python字符串处理(版本2.7)-学习笔记
- Python2.7学习笔记-矩阵乘法matrix vs. ndarray ; dot vs. inner,
- py-faster-rcnn训练笔记(ubuntu14.04+cuda7.5+cuDNNv3+Python2.7)
- Python2.7自学笔记3――流程控制语句
- python2.7学习笔记(2) ——数据类型和变量
- Python 2.7 学习笔记 访问mysql数据库
- NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7
- 《Python数据分析与挖掘实战》笔记(二):Python2.7语法和第三方库