zoukankan      html  css  js  c++  java
  • 一:面向对象的初识

    一:面向对象

    def Person(name,hp,ad,sex):   		# 模子
        dic = {'name':name,'blood':hp,'attack':ad,'sex':sex}
    
        def fight(dog):  			# 攻击  属于人
            dog['blood'] -= dic['attack'] 	# 狗掉血,就是人的攻击力
            print('%s打了%s,%s掉了%s血' % (dic['name'], dog['name'], dog['name'], dic['attack']))
        
        dic['fight'] = fight
        return dic
    
    def Dog(name,hp,ad,kind):
        dic = {'name': name, 'blood': hp, 'attack': ad, 'kind': kind}
    
        def bite(person):  			# 咬 属于狗
            person['blood'] -= dic['attack']
            print('%s咬了%s,%s掉了%s血' % (dic['name'], person['name'], person['name'], dic['attack']))
    
        dic['bite'] = bite
        return dic
    
    # 互相打
    ivan = Person(' ivan ',20,1,'不详')
    print(alex)
    hei = Dog('小黑',3000,10,'哈士奇')
    print(hei)
    
    ivan ['fight'](hei)
    hei['bite']( ivan)     狗咬人,def bite(person):不用传dog,(不需要传其它的)
    
    
    
    
    通过两个模子 捏出两个具体的角色
    抽象 :只能知道有哪些属性
    具体 :可以描述他的属性的值的
    
    给两个特定的属于特定角色的方法 设置了他的使用范围
    让其他角色不能随意调用属于固定角色的方法
    
    1 先思考这个程序中有几个角色
    2 然后描述这个角色 属性和动作
    3 把这个属性和动作都装到一个角色中
    4 面向对象编程
    
    
    

    二:面向对象语法

    对象 :具有具体的属性值的实际存在的例子		实例
    类 :具有相同方法和属性的一类事物
    
    class Dog:
        变量 = 1000
        变量2 = 'abc'
        变量3 = [(1,2),(3,4)]
    
    查看类当中的变量,方法一
    print(Dog.__dict__['变量'])       		# Dog.__dict__ 生成一个字典
    print(Dog.__dict__['变量2'])
    print(Dog.__dict__['变量3'])
    查看方法二(常用)
    print(Dog.变量)
    print(Dog.变量2)
    print(Dog.变量3)
    
    每一只狗都需要有自己的属性
    class Dog:   		# 狗模子  -- 类
        a = 1000  		# 静态变量 这个类中的变量 是所有的对象共享的值
        def __init__(self,name,hp,ad,sex):   # init自动传进去,自动把self return回来
            print('执行我啦')
            self.__dict__['name'] = name
            self.__dict__['blood'] = hp
            self.__dict__['ad'] = ad
            self.__dict__['sex'] = sex
            print(self.__dict__)    # 上面所有的都进入到了这个字典
    
    
    ivan = Dog(' ivan ',20,10,'不详') 	 # 具体的狗 对象 实例化的过程
    ivan = Dog(' ivan ',20,10,'不详')
    print(ivan.__dict__['name'])
    print(ivan.__dict__['blood'])
    
    # 对象 也是实例
    # 创建一个对象也是创建实例
    
    
    
    # 狗对象都是一个内存空间(字典)
    # self实际上是由python的语法 开辟了一个属于具体的对象的空间
    # 执行init,向self这块空间管理的字典中添加一些key value  ,self会自动的被返回
    
    
    # 实例化的过程 :
        1.开辟了一块空间,创造了一个self变量来指向这块空间
        2.调用init,自动传self参数,其他的参数都是按照顺序传进来的
        3.执行init
        4.将self自动返回给调用者
    
    
    # ivan 就等于 self ,self返回的字典给Ivan,可以直接使用ivan内部的字典属性,直接加.就可以
    
    
    
    class Dog:
        def __init__(self,name,hp,ad,kind): 	 # 初始化方法
            self.name = name   					# 实例变量   对象属性
            self.blood = hp
            self.ad = ad  		# 左边ad相当于键,右边ad相当于值,使用时候是写左边的键
            self.type = kind
    
    class Person:
        a = 1000   							    # 静态变量  用类名调用
        def __init__(self,name,hp,ad,sex):  	  # 初始化方法
            self.name = name   					 # 实例变量   对象属性
            self.blood = hp
            self.ad = ad
            self.sex = sex
    
        def fight(self,dog):  				# 动态变量    类方法
            dog.blood -= self.ad			# 狗掉血,就是人的攻击力
            print('%s攻击了%s,%s掉了%s点血'%(self.name,dog.name,dog.name,self.ad))
    
    ivan = Dog(' ivan ',20,10,'不详')   		  # ivan 对象 实例
    大亮 = Person('大亮',300,20,'male')  		# 大亮 对象 实例
    print( ivan.blood)
    大亮.fight(ivan) 			 		# 相当于  Person.fight(大亮, ivan)
    print(ivan.blood)
    
    
    
    1.类名可以调用所有定义在类中的名字
        变量  : a
        函数名  : def fight             (init初始化方法是自动调用)
            
    2.对象名  
    可以调用所有定义在对象中的属性
    在init函数中 和 self相关的
    
    # 调用函数的,且调用函数的时候,会把当前的对象当做第一个参数传递给self
    
    
    
    

    三:清晰的面向对象例子

    class Dog:
        def __init__(self,name,blood,ad,kind):
            self.name = name  		# 向对象的内存空间中添加属性
            self.hp = blood   		# 可以通过self在类的内部完成 
            self.ad = ad
            self.kind = kind
    
        def bite(self,person):
            person.hp -= self.ad
            print('%s攻击了%s,%s掉了%s点血' % (self.name, person.name, person.name, self.ad))
    
    class Person:
        def __init__(self,name,hp,ad,sex):
            self.name = name
            self.hp = hp
            self.ad = ad
            self.sex = sex
    
        def fight(self,dog):
            dog.hp -= self.ad
            print('%s攻击了%s,%s掉了%s点血'%(self.name,dog.name,dog.name,self.ad))
    
            
    hei = Dog('小黑',300,20,'哈士奇')
    ivan = Person(' ivan ',20,1,'不详')
    ivan.fight(hei)
    print(hei.hp)
    hei.bite(ivan)
    print(ivan.hp)
    
    
    
    class Dog:
        def __init__(self,name,blood,ad,kind):
            self.name = name  		# 向对象的内存空间中添加属性
            self.hp = blood   		# 可以通过self在类的内部完成
            self.ad = ad
            self.kind = kind
    
    hei = Dog('小黑',300,20,'哈士奇')
    hua = Dog('小花',400,30,'萨摩耶')
    print(hei.name)	 	# 小黑
    print(hei.ad) 		#  20
    print(hei.kind) 	# 哈士奇
    
    hei.food = '单身狗粮'  		# 也可以通过对象名在类的外部完成修改
    hei.hp = 305  			   # 也可以在类的外部通过对象名来修改属性的值
    
    print(hei.__dict__)  # {'name': '小黑', 'hp': 305, 'ad': 20, 'kind': '哈士奇', 'food': '单身狗粮'}
    print(hei.hp)  		 # 305
    print(hei. __dict__[‘hp’])   # 305
    del hei.hp           		# 删除属性
    print(hei.__dict__) # {'name': '小黑', 'ad': 20, 'kind': '哈士奇', 'food': '单身狗粮'}
    
    # self 就是 谁实例它,就是谁
    
    
    
    # 圆形类
    # 属性 :半径
    # 方法 :计算周长(2pir) 计算面积(pir^2)
    
    from math import pi
    print(pi)
    
    class Circle:
        def __init__(self,r):      
            self.r = r
        def area(self):
            return pi * self.r**2
        def perimeter(self):
            return 2*self.r*pi
        
    c1 = Circle(5)
    c2 = Circle(15)
    print(c1.area())
    print(c1.perimeter())
    print(c2.area())
    print(c2.perimeter())
    
    
    
    一切皆对象 ,所有的变量都是对象,是什么数据类型就是哪个对象
    list 类
    [1,2,3] 对象
    
    int 数据类型
    a = 1
    
    dict
    {'k':'v'}
    
    # 数据类型 也是类
    # 对象 就是具体的数字
    
    所以有的列表都能够使用列表的方法
    所以有的数字都能够使用列表的方法
    
    

    四:练习

    # 长方形 Rectangle               # 正方形 Square    	 # 圆形 circular
    # 平行四边形 Parallelogram      	# 三角形 Triangle
    # 边长 Side length               # 高 high
    
    # 长方形
    class Rectangle:
        def __init__(self,long,wide):
            self.long=long
            self.wide=wide
        def area(self):
             return self.long*self.wide
        def perimeter(self):
             return self.long*2+self.wide*2
    
    r1=Rectangle(2,3)
    print(r1.area())   		# 6
    print(r1.perimeter())   # 10
    
    
    
    # 正方形
    class Square:
        def __init__(self,long):
            self.long=long
        def area(self):
             return self.long*self.long
        def perimeter(self):
             return self.long*4
    
    r1=Square(2)
    print(r1.area()) # 4 
    print(r1.perimeter()) #8
    
    
    # 平行四边形  底bottom  高high  斜边 hypotenuse
    # 周长=2(底边+斜边)	# 面积=底*高
    class Parallelogram:
        def __init__(self,bottom,high,hypotenuse):
            self.bottom=bottom
            self.high=high
            self.hypotenuse=hypotenuse
        def area(self):
             return self.bottom*self.high
        def perimeter(self):
             return (self.bottom+self.hypotenuse)*2
    
    r1=Parallelogram(2,3,4)
    print(r1.area())  # 6 
    print(r1.perimeter()) #12
    
    
    # 三角形  底bottom     高high  斜边 long
    # 周长=long *3		# 面积=底*高/2
    class Triangle:
        def __init__(self,bottom,high,long):
            self.bottom=bottom
            self.high=high
            self.long=long
        def area(self):
             return self.bottom*self.high/2
        def perimeter(self):
             return self.long*3
    
    r1=Triangle(2,3,4)
    print(r1.area())  # 3.0
    print(r1.perimeter())  # 12
    
    
    
    
    
    # 圆形
    from math import pi
    print(pi) # 3.141592653589793
    class Circle:
        def __init__(self,r):
            self.r = r
        def area(self):
            return pi * self.r**2
        def perimeter(self):
            return 2*self.r*pi
    
    c1 = Circle(5)
    c2 = Circle(15)
    
    print(c1.area()) 		# 78.53981633974483
    print(c1.perimeter()) 	# 31.41592653589793
    print(c2.area())  		# 706.8583470577034
    print(c2.perimeter()) 	# 94.24777960769379
    
    
    
    

    五:总结

    几十个函数
    去查看和圆形相关的方法是需要一定时间找到对应方法的
    不管求圆形周长还是面积,都需要传参数r
    所有的函数都是求周长和面积,导致给函数起名字的时候总是要带着图形
    
    面向对象的优点
    规划了代码中的函数处理的是哪一类问题
    解决了传参数的问题
    方便扩展
    方便重用
    
    
    
    类 :有相同特征的事物归为一类
    对象、实例 :类的具体化
    
    实例化 :通过类创造一个对象的过程
        对象 = 类名(参数,参数)
        1.开辟一块内存空间,让self指向它
        2.调用__init__方法,执行init
        3.把self返回给调用者
    
        
    类当中有哪些成员: 		 静态变量 ;动态变量,对象方法
    对象可以存哪些方法: 		所有的对象属性都在对象里
    类名能做什么:			  查看静态变量;实例化对象
    对象名能做什么:		 属性的增删改查;方法的调用
    
    定义类
    class 类名:
        静态变量 = 1000
        def __init__(self,arg1,arg2):
            if arg1<=arg2:
                self.arg1 = arg1
                self.arg2 = arg2
            else:
                self.arg1 = arg2
                self.arg2 = arg1
        def 其他方法(self):
            print('其他方法往往是类名对应的对象所做的动作、行为')
            print('往往还会用到self内部的一些变量')
    
    对象1 = 类名(1,2)
    对象2 = 类名(3,4)
    
    
    
  • 相关阅读:
    3-2 表的增删改查
    3-1 存储引擎的介绍
    2-1 库的增删改查
    1-4 初识sql语句
    1-3 mysql的安装和基本管理
    1-2 数据库概述
    1-1 数据库管理软件的由来
    4-6 IO模型对比
    《测试软件工程师》11,13 测试用例格式
    《软件测试工程师》10 测试环境搭建
  • 原文地址:https://www.cnblogs.com/Quantum-World/p/11403679.html
Copyright © 2011-2022 走看看