上海线下课 selenium python 面向对象语法

地点&时间

20180630日 太平洋咖啡店

线下的语法练习
希望大家勤加练习,学习学来的都是自己的啊。
这里的函数注释以及代码行注释完全是教学用,实际不用这样写。

TestDemo.py

新建python文件

# 函数作用域 如果代码行数几千行,变量名会存在重复,所以变量有对应的作用域的范围
# 变量按作用域的来划分,一个是全局 global 一个是局部 local
# 全局 global在函数和类外部定义,也是一般在代码最上方描述。全局变量在课上会有对应的描述, python推荐用大写来标记
# 局部在函数内部定义,成员变量和局部变量有一定差别,如下


# 比如常见的错误:
# 变量覆盖,和变量没有定义 name "xxx" is not defined


# 第一段函数外打印类变量(类变量可以被类名引用,被函数引用)
# 第二段在类下面的函数内打印类变量
# 代码见下方的def _print_id()
# 第三段建立add()函数,定义1个类变量字符串类型的b对象,接受1个参数a,a+b相加
# 第四段sum()函数的局部对象有哪些(包含变量和方法对象) (<------新增的)
# 第五段看add()函数的结果和play_id字符串相链接,add()返回是int需要str转换

class TestDemo(object):  # 类名格式首字母优先大小写
    "出于对java的考虑,最好把文件名和类名定义完全一致"
    play_id = "haha"  # 类变量 在类下面不在函数范围内
    a = "100"  # 类变量""

    # 本文函数调用注释是教学级别的,学习时可以自己这样写,实际工作中如何注释web自动化课程尾部会讲
    def _print_id(self):  # self是占位也是代表实例化,实例化在内部使用。
        "类内部函数,打印"
        # 函数是代表当前类私有的函数,是命名规范来提醒不要被其他地方调用 是一种约定的,不是语法规则
        return self.play_id  # play_id和self链接后,变成了TestDemo实例化后 这个变量了属于类的成员变量
        # 成员变量是一种静态变量

    def add(self, b):  # b是形参,传入什么是自己约定的 下面文档注释"""按回车
        """
        在类外部去调用add()
        :param b: 按需求是传入1个int
        :return: int 类变量a+形参b
        """
        # 因为b是int类型,str要和int相加,所以TestDemo.a需要转换成int类型
        # 如果a是非数字的字符串
        return int(TestDemo.a) + b  # TestDemo.a类型是str

    def sum(self, b):  # b的形参是给add()用的,形参重载,这个b不等于上面的b
        """
        在类外部把add()+play_id连接
        :param b: 重载add().依照语法写入int 确保add(b)返回是int。就算不是其实也没关系,语法严谨
        :return: str
        """
        # print(b)#这里打印的b作用域是sum函数的,不是add()的b,是由下面函数调用时接受的新参数。
        # func1早期增加代码可读性,但又开销,多创建了1块内存 因为这里被引用了所以 它也是类变量
        func1 = str(self.add(b))  # 这里的b要随着add()重载 add()由int-->str
        # func1引用计时为1
        # 第五段
        print("新增的第四段sum函数的局部变量有哪些", locals())  # self.add() 因为是一个类方法 所以也会随着locals被输出,因为这里没有被调用或者引用所以是一段内存地址
        return func1 + TestDemo.play_id  # func1引用1-1=0


t = TestDemo()  # t是TestDemo的实例化对象
print("类名引用类变量", t.play_id)  # print打印加前面注释是做静态打印调式


# 被函数引用
def print_id():  # 和class类是平级的,这个不属于class内的函数
    # 测试函数,如果有返回的 函数的文档用"""   """
    "打印TestDemo的类变量,函数名不能是print关键字"
    # return TestDemo().play_id #因为已经有实例化对象t了,所以尽量用下面的
    return t.play_id


# 调用函数print_id(),因为上面是return所以需要打印
print("类名引用类变量", print_id())
print("第一段函数外打印类变量完成")

print("函数add调用后结果100+5=", t.add(5))  # 第三题105
print("调用函数sun,让add函数和类变量play_id相加", t.sum(5))  # 结果是105haha 5是add()函数内重载b用的