目录
面向对象
一、类和对象
从今天我们开始学习面向对象,学习对象不能不提两个非常重要的的概念:类和实例对象
问题一:什么是类,什么是实例对象?
类:是一类事物的抽象概念(模型),不是真实存在的,描绘了该类事物共同的特征和行为。
例如:船、车、飞机
实例对象:某类事物的具体个体,是该类事物的具体表现,它是真实存在的
例如:“辽宁号”是一艘具体的船,“泰坦尼克号”也是一艘具体的船
1、类的定义
关键字:class
1.1、定义类的语法:
方式一:class类名:
方式二:class类名(object):
注意:方式一、方式二定义类是一样的,没有任何区别,只是写法不一样
1.2、类名的命名规范:
遵循标识符的命名规范
建议使用大驼峰命名法(每个单词的第一个字母大写)
例如:Hero、Cat、MyClass、TestCase
1.3、案例
定义一个猫类
#定义一个猫类
calss Cat(object):
pass
创建实例对象
语法:obj = 类名()
案例:
#创建猫类的三个实例对象:kitty,coffee,jingel
kitty = Cat()
coffee = Cat()
jingle = Cat()
对象的组成
2、类属性和实例属性
属性:定义在类中的变量()
2.1、类属性
什么是类属性:这个类事物的共同特征
猫类的特性:四条腿、一条尾巴、两只眼睛……
定义类属性
class Cat (object):
leg = “四条腿”
tail = “有尾巴”
类属性的访问
1、类可以直接访问类属性
2、该类的实例对象也可以访问类属性
2.2、实例属性
实例属性:实例对象自己的属性
叮当猫的实例属性:
名字:叮当
年龄:200
黑猫警长的实例属性
名字:黑猫
年龄:18
给对象添加实例属性
语法语法格式:对象.属性名 = 属性值
案例
jingle.name =’叮当’
jingle.age =18
实例属性的访问
实例属性只有该实例对象自己能访问
3、类方法和实例方法
方法:就是定义在类中的函数
3.1、类方法
3.2、实例方法
实例方法的定义:
实例方法直接定义在类中
实例方法的第一个参数为self(必须要写)
案例:猫类的方法定义
calss Car(object):
cry = “喵”
leg = “有四条腿”
tail = “有尾巴”
def sikll_one(self):
print(‘会跑,会移动’)
def sikll_tow(self):
print(‘会抓鱼’)
实例方法的访问:
只有该类的实例对象都可以访问,访问实例方法的时候会自动将对象本身当成参数,传给self接收
4、关于self的理解
所谓的self,可以理解为自己,就是我们的实例本身,代表实例对象,谁去调用代表谁
kitty这个实例对象调用,self就代表kitty
jingle这个实例对象去调用,self就代表jingle
某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,只需要传递后面的参数即可
5、初始化方法:__init__
功能: 定义属性
问题:实例对象有多个属性的时候,有没有更方便的方法来设置?
问题:__init__在什么时候调用?
创建对象的时候会自动调
总结:类的定义,属性,方法,self的含义,初始化方法
二、继承
1、类方法、静态方法、私有属性
类方法
定义:使用装饰器@classmethod,第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法)
调用:实例对象和类对象都可以调用。
应用场景:需要站在类的角度执行某个行为时,那么就应该定位为类方法
静态方法(了解即可,用不到)
定义:使用装饰器@staticmethod,参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
调用:实例对象和类对象都可以调用
应用场景:存放逻辑代码,内部不需要引用类属性和实例属性
私有属性(了解即可)
单下划线开头:_attr
双下划线开头:__attr
声明为私有属性:声明为私有属性,那么该说明属性是类私有的,仅限于在类里面使用,不要在类外面去调用(实际上类外卖可以访问,讨论这个毫无意义)
2、类的继承关系
2.1、定义类两种方式的区别
#python2中称为经典类,在python3中默认基础object
class MyTest:
pass
#python2中称为新式类
class MyTest(object):
pass
#注意点:python3中上面两种定义方法没有任何区别,都是继承object这个父类
在python3的继承中,所有的类都默认继承自object这个基类。
2.2、什么是继承,继承有什么用?
面向对象编程中有一个重要的思想叫继承,子类通过继承可以获得父类的属性和方法,被继承的类叫父类(基类),继承的类叫子类。
作用:子类通过继承可以获得父类的属性和方法,提高开发的效率及代码的复用率。
问题需求:
需求V1:实现一个初始版的手机类(大哥大)
只能打电话
需求V2:实现一个定义功能机类
打电话,听音乐,发短信
需求V3:实现一个智能手机类
打电话,听音乐,发短信,看视频,玩游戏,手机支付,视频通话
2.3、继承的定义
语法:class类名(父类名)
案例练习:完成下面手机类继承的定义
class BasePhone(object):
“””手机基类”””
featurel = “打电话”
def __init__(self,brand,model,price):
“””
初始化手机对象
:param brand: 手机品牌
:param model: 手机型号
:param price: 手机价格
“””
self.brand = brand
self.model = model
self.price = price
def call_phone(self):
print(‘您正在拨打电话’)
class OldPhone(BasePhone):
def send_mgs(self):
print(‘发了一条短信’)
class IPhone(BasePhone):
def photograph(self):
print(‘拍了一张照片’)
3、重写父类方法
重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法
4、调用重名的父类方法
子类重写了父类的方法之后,如何在子类中再调用父类的方法?
方式一:父类名.方法名(self)
方式二:super().方法名()
5、属性动态设置(反射机制):
setattr:设置属性
getattr:获取属性
delattr:删除属性
class Cases;
def__init__(self,name):
self.name = name
case1 =Cases(‘1’)
datas ={‘case_id’:1,’data’:’999’,’url’:’www.baidu,com’}
for k, v in datas.item():
print(k, v, type(k),type(v))
setattr(case1,k,v)
delattr(case1,’name’)
res = getattr(case1,’name’)
print(res)
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接免费拿走:
① 2000多本软件测试电子书(主流和经典的书籍应该都有了)
② 软件测试/自动化测试标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)