• 类(class)的形成过程


    def Person(name,hp,ad,sex):  #一般模子名是首字母
        dic = {'name':name,'blood':hp,'attack':ad,'sex':sex}
        def fight(Dog): #这是人打其他事物的方法,当然传入的也会是一个对象
            Dog['blood'] -= dic['attack']  #传入的对象调用它方法内的字典获取值 跟原本人的字典dic的值进行运算
            print('%s打了%s,%s掉了%s血' % (dic['name'], dog['name'], dog['name'], dic['attack']))
            print(Dog['blood'])
        dic['fight'] = fight
        return dic
    
    def Dog(name,hp,ad,sex):
        dic = {'name':name,'blood':hp,'attack':ad,'sex':sex}
        def fight (person):
            person['blood'] -= dic['attack']
            print('%s咬了%s,%s掉了%s血' % (dic['name'], person['name'], person['name'], dic['attack']))
        dic['fight'] = fight
        return dic
    alex = Person('alex',200,20,'不详')
    print(alex)
    dog = Dog('dog',100,10,'哈士奇')
    print(dog)
    alex['fight'](dog) #第一次调用改变了 dog的血量
    alex['fight'](dog) #第二次调用在第一次的基础上改变了dog的血量
    alex['fight'](dog) #这是因为每次这样调用最终都会return给原字典,代码是从上往下执行的,而代码的销毁是在执行完整个程序才销毁
    dog['fight'](alex) #所有,你再次执行的时候还是80->60->40.而你在添加一行代码的时候它再次从100开始到你添加的那个部分
    看着要转化了,
    class Person:
        def __init__(self,name,blood,attack,sex):#这参数的第一个值就算是字典啦,当然也可以改名字,但是一般般不要,约定俗成
            self.name = name                     #后面的参数算是字典中值
            self.blood = blood
            self.attack = attack
            self.sex = sex
        def fight(self,dog):
            dog.blood -= self.attack
            print('{}打了{}一拳,{}掉了{},剩余血量{}'.format(self.name,dog.name,dog.name,self.attack,dog.blood))
    
    class Dog:
        def __init__(self,name,blood,attack,kind):
            self.name = name
            self.blood = blood
            self.attack = attack
            self.type = kind
        def fight(self,person):
            person.blood -= self.attack
            print('{}咬了{}一口,{}掉了{},剩余血量{}'.format(self.name, person.name, person.name, self.attack, person.blood))
    
    alex = Person('alex',200,20,'')
    alexbb = Dog('alexbb',100,40,'哈士奇')
    alex.fight(alexbb)
    alexbb.fight(alex)
    两者的区别是第一种是在狗函数内部定义了一个打架的函数,而第二种是在狗类里定义了函数。
    第一种调用打架函数的时候要通过打架函数的外层函数打架字典的值加一个括号进行调用:['fight'](参数)
    而里面的运算也是各种调用字典来运算;
    第二种调用打架函数是直接调用它自己的类里面的函数,用的也直接是.fight(参数)
    两者的共同点都是将打架函数包装在自己的主方法跟类里,不会让除它自己外的别人污染
    个人建议:是选择类这种方法使用,毕竟看起来爽,调用起来更爽,比较牛逼高级哇

    #实例化过程
    #1.定义init函数,此时开辟了一个空间,self指向这个空间 例子:def __init__(self,name,blood,attack,sex)
    #2.使用类来传入参数(这个也算是调用init函数) 例子:alex = Person('alex',200,20,'男')
    #2.执行这个init函数
    #3.调用self 和其他的参数,创造一个字典
    #4.将形成的字典self返回给调用者,比如这个 调用位置的’alex‘ got it !!!
     
     
  • 相关阅读:
    演示-JQuery属性选择器
    演示--Jquery核心选择器
    JQuery选择器
    SoapUI 接口测试之post提交本地数据文件
    Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
    测试思想-测试设计 测试用例设计需要注意的几个点
    Jenkins 为Jenkins添加Windows Slave远程执行python项目脚本
    测试思想-测试设计 接口测试用例设计实践总结
    测试思想-测试设计 测试用例设计最新实践总结-来自不断的追求
    Python 基于Python实现邮件发送
  • 原文地址:https://www.cnblogs.com/CNHK1949/p/10594081.html
Copyright © 2020-2023  润新知