python3 面向对象学习 (第六周)

前言:

为什么要学习python3?

原因:

1、学习一门语言能力

2、通过该语言能力完成测试自动化以及独立完成自测框架知识

那么我要做什么呢?

1、3天内学习完第六章

要在什么地方做呢?

广州

那到底要怎么做呢?

完成基本的python3的基础知识,从而再学习测试框架

总结:

1、初步了解了面向对象和面向过程的内容

遗留问题:遗留作业未写

 

面向过程&面向对象

面向过程
面向过程:以事物流程为中心,核心是“过程”步骤,即,先干什么,后干什么.
优点:负责的问题流程化,编写相对简单
缺点:可扩展性差


面向对象
定义:
面向对象:一切以对象为中心,万事万物皆是对象(object)
优点: 可扩展性强
缺点: 编程的复杂度高于面向过程

特性:
class,一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法
语法:
1 #object
2 #一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同
3 
4 class Dog(object):
5     print("hello,I am a dog!")
6 
7 d = Dog()  # 实例化这个类,
8 # 此时的d就是类Dog的实例化对象
9 # 实例化,其实就是以Dog类为模版,在内存里开辟一块空间,存上数据,赋值成一个变量名
View Code
Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法
Inheritance 继承
定义:
#一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继
#面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
案例:
 1 #class People: #经典类
 2 class People(object):  # 新式类的标准语法
 3     def __init__(self,name,age):
 4         self.name = name
 5         self.age = age
 6         self.friends = []
 7 
 8     def eat(self):
 9         print("%s is age:%s eating...."%(self.name,self.age))
10 
11     def talk(self):
12         print("%s is talking..."% self.name)
13 
14     def sleep(self):
15         print("%s is sleeping..." % self.name)
16 
17 class Relation(object):
18     def make_friends(self,obj):
19         print("%s is making friends with %s" %(self.name,obj.name))
20         self.friends.append(obj)
21 class man(People,Relation):
22     def __init__(self,name,age,money): #对函数进行重构,新增功能
23         People.__init__(self,name,age) # 必须先调用父类的方法
24         #super(man,self).__init__(name,age) #注:super是新式类的标准写法
25         self.money = money  #增加新的功能
26         print("%s一出生 %s就有%s块" %(self.name,self.age,self.money))
27     def piao(self):
28         print("%s 你好呀,%s" % (self.name,self.age))
29     def sleep(self):
30         print("man is sleeping...")
31 class Woman(People,Relation):
32     def get_birth(self,obj):
33         print("%s is bron a baby....." % self.name)
34 
35 #m1 = People("yao",12)
36 # m1.eat()
37 # m1.talk()
38 # m1.sleep()
39 #
40 m2 = man("yao22",20,1000)
41 # m2.eat() #父类的方法
42 # m2.piao() #自己的方法
43 w1 = Woman("Zhangs",50)
44 
45 m2.make_friends(w1)
46 w1.name = "张大炮" #和原来的name值没关系
47 print(m2.friends[0].name)  #遗留问题如何打印列表的值?
48 
49 w1.name = "张三炮"
50 print(m2.friends[0])
View Code

 

Polymorphism 多态

定义:
多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。
这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定
py2 经典类是按深度优先来继承的,新式类是按广度优先来继承的
py3 经典类和新式类都是统一按广度优先继承的
一种接口,多种形态

 1 class Animal(object):
 2     def __init__(self, name):  # Constructor of the class
 3         self.name = name
 4 
 5     def talk(self):  # Abstract method, defined by convention only
 6         raise NotImplementedError("Subclass must implement abstract method")
 7 
 8 class Cat(Animal):
 9     def talk(self):
10         print('%s: 喵喵喵!' % self.name)
11 
12 class Dog(Animal):
13     def talk(self):
14         print('%s: 汪!汪!汪!' % self.name)
15 
16 
17 def func(obj):  # 一个接口,多种形态
18     obj.talk()
19 
20 c1 = Cat('小晴')
21 d1 = Dog('李磊')
22 
23 func(c1)
24 func(d1)
View Code

 

类的实例化以及类变量和实例变量

定义:

实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可用它来为每个实例定制自己的特征
self:在实例化时自动将对象/实例本身传给__init__的第一个参数.
总结:类与对象的关系:类是对事物的总结.抽象的概念.类用来描述对象.对象是类的实例化的结果.对象能执行哪些方法.都由类来决定.类中定义了什么.对象就拥有什么

案例:

 1 class Role:   #构建类
 2     n=123    
 3     name = "我是类的变量name:yao"  #注意:类的变量
 4      # 构造方法 __init__(self) 在创建对象时自动访问这个方法 设置一些初始化的属性信息
 5     def __init__(self,name,role,weapon,life_value=100,money=15000):
 6          #初始化构造函数实
 7          #在实例化时,做一些实例化的工作
 8         self.name = name #注:实例变量(静态属性),作用域就是实例本身
 9         self.role = role
10         self.weapon = weapon
11         self.life_value = life_value
12         self.money = money
13 
14 # 调用下面的方法
15     def shot(self):   #类的方法,功能(动态属性)
16         print("shooting...")
17 
18     def got_shot(self):
19         print("%s:ah...,I got shot..."% self.name)
20 
21     def buy_gun(self,gun_name):   # 定义方法可以新添参数
22         print("just bought %s" %gun_name)
23 
24 
25 r1 = Role('Alex','police','AK47') #生成一个角色
26 r2 = Role('Jack','terrorist','B22')  #生成一个角色
27 
28 
29 r1.shot()
30 r1.got_shot() #Role.got_shot(r1)   结果一致
31 r1.buy_gun("buhaoya")
32 
33 #类变量和实例变量的区别,先找自己实例变量,再找类变量
34 print(r1.name,r1.n)   #先找实例的变量,再找类的变量
View Code

 

构造函数和析构函数
常用内置函数:
 __init__:构造函数, 主要用来创建对象时初始化对象(为成员变量赋值)
 __del__:析构函数,主要在销毁对象时调用(例如数据库连接)

 1 class Role:
 2 
 3     # 构造函数
 4     def __init__(self, name, role, weapon, life_value=100, money=15000):
 5         self.name = name
 6         self.role = role
 7         self.weapon = weapon
 8         self.life_value = life_value
 9         self.money = money
10 
11     # 类的方法(动态属性)
12     def buy_gun(self, gun_name):
13         print("%s just bought %s" % (self.name, gun_name))
14 
15     def got_shot(self):
16         print("ah...I got shot...")
17 
18     # 析构函数:在实例对象释放、销毁的时候自动执行
19     def __del__(self):
20         print("%s:彻底死了。。。" % self.name)
21 
22 
23 r1 = Role("Alex", "Policeman", "AK47")
24 r1.buy_gun("AK47")
25 r1.got_shot()
26 del r1 #删除实例r1
27 
28 r2 = Role("Jack", "terrorist", "B22")
29 r2.buy_gun("B22")
30 r2.got_shot()
View Code

 

posted @ 2021-02-09 17:02  夜半听雨声*  阅读(103)  评论(0)    收藏  举报