龙空技术网

全栈自动化测试之python基础面对对象之类和继承

暴躁测试君阿六 159

前言:

现在兄弟们对“pythonobjectclass”都比较注重,看官们都想要学习一些“pythonobjectclass”的相关文章。那么小编同时在网摘上搜集了一些有关“pythonobjectclass””的相关内容,希望姐妹们能喜欢,朋友们一起来了解一下吧!

前言

小伙伴们大家好呀,我们都知道学习软件测试需要掌握一门开发语言,python是所有开发语言中比较适合新手学习的一门语言,今天的这篇文章呢主要介绍python面对对象中的类和继承,包括类方法、静态方法、只读属性、继承等。

一、类方法

1.类方法定义

使用装饰器@classmethod装饰,且第一个参数必须是当前类对象,该参数名一般约定为“cls",通过它来传递类的属性和方法(不能传递实例属性和实例方法),跟实例方法的self用法相似。

2.类方法的调用

实例对象和类对象都可以调用

3.应用场景

在需要站在类的角度执行某个行为时,那么就可以定义为类方法

class Student:    def __init__(self, name, age):        self.name = name        self.age = age    def student_info(self):        """实例方法"""        print("-----student_info-----")        print('name:{}'.format(self.name))        print('age:{}'.format(self.age))    @classmethod       # 带有@classmethod标志的就是类方法,@xxx 就是装饰器    def class_info(cls):  # cls与self的用法一致,self代表的是实例对象本身,cls代表的是类本身        """类方法"""     # 应用场景:需要站在类的角度执行某个行为时,就定义为类方法        print("-----class_info-----")        print('在校学生')        print("cls:", cls)case = Student('张三', 22)case.student_info()case.class_info()  # 通过实例对象访问类方法Student.class_info()  # 通过类对象访问类方法

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py-----student_info-----name:张三age:22-----class_info-----在校学生cls: <class '__main__.Student'>-----class_info-----在校学生cls: <class '__main__.Student'>Process finished with exit code 0
二、静态方法

(了解即可,在自动化测试中暂时用不到)

1.静态方法定义

使用装饰器@staticmethod装饰,参数随意,不需要“self“和“cls"参数,但是方法体中不能使用类或实例的任何属性和方法

2.静态方法的调用

实例对象和类对象都可以调用

3.应用场景

用于存放纯逻辑代码,内部不需要引用类或实例的属性和方法

class Student:    def __init__(self, name, age):        self.name = name        self.age = age    def student_info(self):        """实例方法"""        print("-----student_info-----")        print('name:{}'.format(self.name))        print('age:{}'.format(self.age))    @staticmethod       # 静态方法不会牵涉到类和实例,里面只存放逻辑代码    def static_move():  # 类和实例都可以调用静态方法        """静态方法"""        print("-----static_info-----")        print('清华大学的学生')case = Student('张三', 22)case.student_info()case.static_move()  # 通过实例对象访问静态方法Student.static_move()  # 通过类对象访问静态方法

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py-----student_info-----name:张三age:22-----static_info-----清华大学的学生-----static_info-----清华大学的学生Process finished with exit code 0
三、只读属性

(了解即可,在自动化测试中暂时用不到)

1.只读属性定义

使用装饰器@property装饰,需要一个self参数,即实例对象本身,用于定义一个属性(一般指实例属性),只能读,不能写入

2.只读属性的调用

通过实例对象去调用

3.应用场景

属性只能读,不可以写入或更改

class Student:    def __init__(self, name, age):        self.name = name        self.age = age    def student_info(self):        """实例方法"""        print("-----student_info-----")        print('name:{}'.format(self.name))        print('age:{}'.format(self.age))    @property    def property(self):  # 定义一个只能用,不能改的属性,了解即可        """只读属性"""        print("-----property_info-----")        return 18case = Student('张三', 22)case.student_info()print(case.property)  # 通过实例对象访问只读属性

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py-----student_info-----name:张三age:22-----property_info-----18Process finished with exit code 0
四、继承

所有的类都默认继承自object这个父类(基础类)。那么什么是继承?继承的作用是什么呢?

1.继承的定义及作用

定义:面对对象编程中有一个很重要的思想叫继承,子类可以通过继承获得父类的属性和方法,被继承的类叫父类(基类),继承的类叫子类作用:子类可以通过继承获得父类的属性和方法,从而提高开发的效率和代码的复用

2.调用父类里的方法

子类的实例对象能访问所有父类的实例方法,不管往上有几层父类都可以访问,但不能往下访问自己的子类

class BasePhone(object):    """定义一个手机基础类"""    def __init__(self, brand, model, price):        self.brand = brand        self.model = model        self.price = price    def phone_func(self):        """手机功能"""        print("这款手机是触屏手机")        print("这款手机是智能手机")        print("这款手机有红外线功能")        print("这款手机有nfc功能")class HonorPhone(BasePhone):    """继承手机基础类,这是荣耀系列手机,基础功能都有"""    def phone_info(self):        print("您的手机品牌是{},型号{},价格{}".format(self.brand,self.model,self.price))    def honor_func(self):        """荣耀功能"""        print("这款手机支持HiFi")        print("这款手机可以玩mobile游戏")        print("这款手机支持应用分屏")class HonorPorPhone(HonorPhone):    """继承手机基础类,这是荣耀pro系列手机,基础功能和荣耀功能都有"""    def new_func(self):        """新功能"""        print("这款手机支持30倍变焦")# 实例化对象,继承后有最上层父类的初始化方法,需要传三个参数phone1 = HonorPorPhone('荣耀手机', 'Honor20pro', '¥3599')phone1.phone_info()phone1.phone_func()    # 调用最上层父类的方法(子类创建出来的对象能访问所有父类的实例方法)phone1.honor_func()   # 调用父类的方法phone1.new_func()   # 调用自己的方法phone2 = HonorPhone('荣耀手机', 'Honor20', '¥2999')# 作为HonorPorPhone类的父类,创建出来的对象不能访问子类(即HonorPorPhone类)的实例方法,不能往下访问phone2.new_func()     # 因此这里运行会报错

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py您的手机品牌是荣耀手机,型号Honor20pro,价格¥3599这款手机是触屏手机这款手机是智能手机这款手机有红外线功能这款手机有nfc功能这款手机支持HiFi这款手机可以玩mobile游戏这款手机支持应用分屏这款手机支持30倍变焦Traceback (most recent call last):  File "D:/learn/python18_http_request/exercise/test.py", line 62, in <module>    phone2.new_func()AttributeError: 'HonorPhone' object has no attribute 'new_func'Process finished with exit code 1

调用父类的属性也是如此,这里就不再举例了。

3.子类中调用重名的父类方法

子类不仅仅可以调用父类的方法,也可以重写父类的方法再重新调用,简单来说在子类中写一个与父类同名的方法,并且也沿用父类方法里的代码,只是在父类方法基础上再增加一些代码,子类重写了父类的方法后,再调用父类方法的方式有两种:

方式一:父类名.方法名(self)方式二:super().方法名()

# 继承:在python3的继承中,所有的类都默认继承自object这个父类(基础类)# 两种写法都默认继承object类# class Phone:#     pass## class BasePhone(object):#     passclass BasePhone(object):    """定义一个手机基础类"""    def __init__(self, brand, model, price):        self.brand = brand        self.model = model        self.price = price    def phone_func(self):        """手机功能"""        print("这款手机是触屏手机")        print("这款手机是智能手机")        print("这款手机有红外线功能")        print("这款手机有nfc功能")class HonorPhone(BasePhone):    """继承手机基础类,这是荣耀系列手机,基础功能都有"""    def phone_info(self):        print("您的手机品牌是{},型号{},价格{}".format(self.brand,self.model,self.price))    def phone_func(self):        """重写父类的手机功能方法,在这基础上增加一个功能"""        print("这款手机有双摄像头")        # BasePhone.phone_func(self)  # 重写父类同名方法后,再调用父类的方法   第一种方式        super().phone_func()    # 重写父类同名方法后,再调用父类的方法   第二种方式(常用)    def honor_func(self):        """荣耀功能"""        print("这款手机支持HiFi")        print("这款手机可以玩mobile游戏")        print("这款手机支持应用分屏")class BetaPhone(BasePhone):    # 这个类没有重写父类的手机功能方法    """继承手机基础类,这是Beta系列手机,有基础功能"""    def phone_info(self):        print("您的手机品牌是{},型号{},价格{}".format(self.brand,self.model,self.price))    def new_func(self):        """新功能"""        print("这款手机支持30倍变焦")# 实例化对象,继承后有最上层父类的初始化方法,需要传三个参数phone1 = HonorPhone('荣耀手机', 'Honor20', '¥2999')phone1.phone_info()phone1.phone_func()    # 调用父类的方法phone1.honor_func()   # 调用自己的方法print("-------------分割线------------")phone2 = BetaPhone('Beta手机', 'Beta8', '¥3299')phone2.phone_info()phone2.phone_func()phone2.new_func()

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py您的手机品牌是荣耀手机,型号Honor20,价格¥2999这款手机有双摄像头这款手机是触屏手机这款手机是智能手机这款手机有红外线功能这款手机有nfc功能这款手机支持HiFi这款手机可以玩mobile游戏这款手机支持应用分屏-------------分割线------------您的手机品牌是Beta手机,型号Beta8,价格¥3299这款手机是触屏手机这款手机是智能手机这款手机有红外线功能这款手机有nfc功能这款手机支持30倍变焦Process finished with exit code 0

重写父类方法后也可以不再调用父类方法,相当于把重名的方法重新写一遍,如果觉得理解不了,自己多敲几遍,举一反三练习一下吧!

总结

今天的文章就到这里了哟,希望可以帮助到正在学习python自动化的小伙伴哟,喜欢的小伙伴不要忘记点赞收藏评论加关注哟。

标签: #pythonobjectclass #python静态方法可以被继承吗