超级详细的python基础面向对象

目录

面向对象

一、类和对象

1、类的定义

2、类属性和实例属性

3、类方法和实例方法

4、关于self的理解

5、初始化方法:__init__

二、继承

1、类方法、静态方法、私有属性

2、类的继承关系

3、重写父类方法

4、调用重名的父类方法

5、属性动态设置(反射机制):


面向对象

一、类和对象

从今天我们开始学习面向对象,学习对象不能不提两个非常重要的的概念:类和实例对象

问题一:什么是类,什么是实例对象?

       类:是一类事物的抽象概念(模型),不是真实存在的,描绘了该类事物共同的特征和行为。

       例如:船、车、飞机

       实例对象:某类事物的具体个体,是该类事物的具体表现,它是真实存在的

       例如:“辽宁号”是一艘具体的船,“泰坦尼克号”也是一艘具体的船

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技术交流群里(技术交流和资源共享,广告进来腿给你打断)

群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值