python_类and对象

背景:因为python+selenium搭建框架封装函数的过程中,发现自己对这块模糊了,阻塞了,所以特开个python基础栏目,以做补充。
摘要:python 的 类和对象。

面向对象编程的三大特征:
封装:将数据和方法放在一个类中就构成了封装
继承:python中子类可以继承多个父类
多态:不同的子类重写了父类的方法,实现了多种形态。

1、创建和使用
首先,你问我对象是啥子?我说:一切皆可对象。
猴子是一个对象,静态属性:它自己天生就带的,2个耳朵,1个屁股。动态属性:奔跑、爬树、一言不合就开车~~

class Dog():
    '''一次模拟小狗的简单尝试'''

    # '属性'
    def __init__(self,name,age):
        '''初始化dog的属性'''
        self.name = name
        self.age = age

    # '方法'
    def sit(self):
        '''模拟小狗蹲下'''
        print(self.name.title() + "is now sitting.")

    def roll_over(self):
        '''模拟小狗打滚'''
        print(self.name.title()+'rolled over!')

# (1)类化为对象,访问属性
a = Dog('habagou1',6).name
b = Dog('habagou2',6).age
print(a,b)
# (2)类化为对象,调用方法
a1 = Dog('habagou3',6).sit()
b1 = Dog('habagou3',6).roll_over()
print(a1)

实际项目中,我们是怎么用类的:代码

# 将鼠标的基础操作视为一个类
class Base():

    def __init__(self, driver, log):
        self.driver = driver
        self.log = FrameLog().log()

    # 查找界面上的元素
    def findele(self, *args):
            return self.driver.find_element(*args)

    # 点击
    def click(self, *args):
        return self.findele(*args).click()
	
    # 发送信息
    # noinspection SpellCheckingInspection
    def sendkey(self, args, value):
        self.findele(*args).send_keys(value)

2、给属性指定默认值、修改属性值、递增属性值

class Dog():
    '''一次模拟小狗的简单尝试'''

    # '属性'
    def __init__(self,name,age):
        '''初始化dog的属性'''
        self.name = name
        self.age = age
        self.a = 0

    # '方法'
    def sit(self):
        '''模拟小狗蹲下'''
        print(self.name.title() + "is now sitting.")

    def roll_over(self):
        '''模拟小狗打滚'''
        print(self.name.title()+'rolled over!')

    def man_bu(self):
        '''小狗漫步'''
        print('小狗向前走了' + str(self.a) + '步')

    def update_man_bu(self,b):
        self.a += b

# # (1)类化为对象,访问属性
# a = Dog('habagou1',6).name
# b = Dog('habagou2',6).age
# print(a,b)
# # (2)类化为对象,调用方法
# a1 = Dog('habagou3',6).sit()
# b1 = Dog('habagou3',6).roll_over()
# print(a1)

# 修改类的默认属性值,且属性值递增
a = Dog('habago4u',6)
print(a.man_bu())

a.update_man_bu(5)
a.update_man_bu(5)
a.update_man_bu(5)
print(a.man_bu())

3、类的继承:代码里的第二个类有3点。

class Dog():
    '''一次模拟小狗的简单尝试'''

    # '属性'
    def __init__(self,name,age):
        '''初始化dog的属性'''
        self.name = name
        self.age = age
        self.a = 0

    # '方法'
    def sit(self):
        '''模拟小狗蹲下'''
        print(self.name.title() + "is now sitting.")

    def roll_over(self):
        '''模拟小狗打滚'''
        print(self.name.title()+'rolled over!')

    def man_bu(self):
        '''小狗漫步'''
        print('小狗向前走了' + str(self.a) + '步')

    def update_man_bu(self,b):
        self.a += b

class huangsegougou(Dog):
    '''这是黄色狗狗'''
    
    # (1)这两行代码中的,super函数让黄色狗狗继承了父类dog的所有属性
    def __init__(self,name,age):
        super(huangsegougou, self).__init__(name,age)
        # (2)将下面的wangcai类的实例直接放在这,只要我调用黄色色狗狗这个类,我的旺财就会“吼一声”
        self.wangcai = Wangcai()
        
    # (3)通过覆盖方法名,直接重写了父类的方法。
    def man_bu(self):
        print('黄色狗狗走了' + str(self.a) + '步')
        
class Wangcai:
    
    def __init__(self):
        print('旺财吼了一声,声如雷!')

#以下是4月3号补充:
# 类的私有属性、继承、拓展、重写、超继承(重写后父类的方法不存早了,所以需要超继承)
class Test_a:

    def __init__(self, a, b): # 私有属性
        self.a = a
        self.b = b

    def add(self):
        return self.a + self.b

    def sub(self):
        return self.a - self.b

class Test_b(Test_a): # 继承

    def divide(self): # 拓展
        return self.a/self.b

    def add(self): # 重写了父类的add方法
        print(super(Test_b,self).add()) # 超继承 = 子类重写的情况下调用父类的方法add
        print(self.a + self.b + 10)


if __name__ == "__main__":
    Test_b(5,6).add()


D:\interface_project\venv\Scripts\python.exe D:/interface_project/python_xx/test.py
11
21

4、导入类
导入类让我们更能专注于主程序的高级逻辑了,项目中就是主要关注业务逻辑的实现。
(1)项目中的base.py定义了很多基础的类,全部导入:from base import *
(2)一个类,可以继承多个类。,要继承的类逗号隔开就行了,类名后面的括号里头跟的是父类,可以跟多个,如果调用的父类的方法不一样,那就是调用特定的某个父类的方法,如果调用的父类方法在两个父类里头都有,遵循先来后到原则。

class Dituguanli(UnitBase,Base):

    # 如何确保是Base类中的self.find_element()跟unittest中的是一类。
    def test_dianjixinwen(self):
        self.findele(By.XPATH,"//*[text()='新闻']")
        print('跑通了')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值