python自动化--语言基础五面向对象、迭代器、range和切片的区分

面向对象

一、面向对象简单介绍:

 1 class Test():            #类的定义
 2     car = "buick"        #类变量,定义在类里方法外,可被对象直接调用,具有全局效果
 3     def __init__(self):    #构造方法
 4         self.name = 1      #成员变量,可以在类的不同方法间调用,也可以由类创建的对象进行调用
 5         print("name=",self.name)
 6 
 7     def say(self):         #类方法必须包含参数self,且为第一个参数
 8         address = "china"  #方法中的局部变量
 9         print("address=",address)
10 
11         self.address = address #局部变量可以在类方法间使用
12 
13     def cry(self):
14         print(self.address)    #打印上面局部变量
15 
16     @staticmethod              #静态方法可以被类名直接调用
17     def fun1():
18         print("我是静态方法")
19 
20 t = Test()   #t为类创建的对象
21 # print(t.car) #打印类变量
22 t.say()
23 t.cry()
24 Test.fun1()
25 #方法(函数)、类变量、成员变量(init)、局部变量(def)

二、类的继承,子类可以使用父类的方法,父类不可以使用子类的方法

三、方法重写:调用最新的方法

 1 class Parent():
 2     def myMthod(self):
 3         print("父类的方法")
 4 
 5 class Cjild(Parent):
 6     def myMthod(self):
 7         print("子类的方法")
 8 
 9 c = Cjild()
10 c.myMthod() #先调用自己的方法,也叫做方法重写

四、私有变量和方法

 

 1 class Info():
 2     def __init__(self):
 3         self.__name = 'xiaohan'  #私有变量(一般只能在类内部使用)
 4 
 5     def say(self):
 6         print(self.__name)       #类的内部调用
 7 
 8 a = Info()
 9 # print(a.__name)       #类的外表调用报错,无法调用
10 print(a._Info__name)    #注意:可以用a._Info__name这样的方式在类的外部调用,这就是python的灵活性

 

 

 

迭代器

#迭代器一次返回一个成员
list1 = [1,2,3,4]
it = iter(list1)   #创建一个对象并赋值给it
print(next(it))    #1
print(next(it))    #2
print(next(it))    #3
print(next(it))    #4

range和切片的比较:

range:

1 range(strat,end,step)
2 range(4) range(0,4) range(0,4,1)
3 range(-3,3)
4 range(3,-3,-1)
5 
6 range(-3,3,-1)          #输出为空
7 range(0,4,-1)           #输出为空
8 range(3,2,1)            #输出为空

切片:

1 a[start,end,seq]
2 seq如果为正,从左往右走,如果start大于end显示为空
3 seq如果为负,从右往左走,如果start小于end显示为空
4 如果start为空,表示从头开始走
5 如果end为空,表示走到末尾
6 如果start和end都为空,取全部

如下 标记位:

# 0   1   2   3
# a   b   c   d
# -4 -3 -2  -1

练习:

 1 求圆的面积和周长
 2 from math import pi
 3 class Shape():
 4     def getArea(self,r):
 5         print("圆的面积是:%.2f"%(pi*(r**2)))
 6 
 7     def getLong(self,r):
 8         print("圆的周长是:%.2f"%(2*pi*r))
 9 
10 y = Shape()
11 y.getArea(5)
12 y.getLong(5)
 1 统计员工信息和工资
 2 class Employee:
 3 
 4     count = 0
 5     def __init__(self,name,salory):
 6         self.name = name
 7         self.salory = salory
 8         Employee.count += 1
 9 
10     def emp_info(self):
11         print("name=",self.name,"salory=",self.salory)
12 
13     def emp_count(self):
14         print("num=",self.count)
15 
16 u = Employee('han',100)
17 u.emp_count()
18 u.emp_info()
19 u1 = Employee('xiaobei',2000)
20 u1.emp_count()
21 u1.emp_info()

思考面向对象的执行顺序:

 1 class Test():
 2     s = "我是一个类变量,嘎嘎"
 3 
 4     def __init__(self):
 5         print("构造方法就是初始化,来一下")
 6         self.a = 1      #可以由类创建的对象调用
 7         self.b = 28
 8 
 9     def __del__(self):
10         print("析构方法就是后期收拾残局的,我来")
11 
12     def foo(self):
13         print("方法内的普通成员")
14 
15     @staticmethod
16     def baba():
17         print("类的静态方法,我可以被类名直接调用哦,来来")
18 
19 t = Test() #创建一个对象,对象啊对象
20 '''
21 思路:
22 init和del在类中仅且执行一次,init是初始化(先勤部队)del是收拾残局(后勤部队)
23 不管是几个方法的调用都会执行下init和del
24 '''
25 t.foo()         #如果单独执行打印init和del,中间打印foo
26 Test.baba()     #如果单独执行打印init和del,中间打印baba
27 print(Test.s)   #如果单独执行打印init和del,中间打印s
28 
29 #如果一起执行打印的顺序是:init、foo、baba、s、del

 

posted @ 2017-03-12 21:01  韩凯1202  阅读(662)  评论(0编辑  收藏  举报