• 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 = 'xiaojia'  #私有变量(一般只能在类内部使用)
     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的灵活性

    迭代器

    1 #迭代器一次返回一个成员
    2 list1 = [1,2,3,4]
    3 it = iter(list1)   #创建一个对象并赋值给it
    4 print(next(it))    #1
    5 print(next(it))    #2
    6 print(next(it))    #3
    7 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         self.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('jia',100)
    17 u.emp_count()
    18 u.emp_info()
    19 u = Employee('yannan',30000)
    20 u.emp_count()
    21 u.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
  • 相关阅读:
    adapter 异步加载
    退出应用
    scrollview 和 edittext 焦点冲突
    判断字符串
    generate portable version cannot addon plugin(buffer var)
    在ubuntu上面安装perl
    TV
    关于xilinx ise10.1与modelsim仿真库编译
    迅雷tips
    Verilog log2 函数
  • 原文地址:https://www.cnblogs.com/ailiailan/p/8065218.html
Copyright © 2020-2023  润新知