zoukankan      html  css  js  c++  java
  • 类(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 !!!
     
     
  • 相关阅读:
    身份证相关类
    微信开发相关文档
    password、文件MD5加密,passwordsha256、sha384、sha512Hex等加密
    图的割点(边表集实现)
    动态库DLL中类的使用
    吴恩达机器学习笔记_第三周
    Android官方开发文档Training系列课程中文版:性能优化建议
    简单算法汇总
    Gson解析第三方提供Json数据(天气预报,新闻等)
    Java字节码 小结
  • 原文地址:https://www.cnblogs.com/CNHK1949/p/10594081.html
Copyright © 2011-2022 走看看