zoukankan      html  css  js  c++  java
  • python学习笔记,初始面向对象。

    1,面向对象的引入

    #人狗大战
    def Person(name,blood,aggr,sex):
        person = {
            'name':name,
            'blood':blood,    #血量
            'aggr':aggr,       #攻击力
            'sex':sex
        }
        # 人 攻击技能 打
        def attack( dog):
            dog['blood'] -= person['aggr']  # 狗的血量减去人的攻击力
            print('%s被打了,掉了%s的血' % (dog['name'], person['aggr']))
        person['attack'] = attack
        return person
    #优点 :代码精简了 方便增加人物  方便修改 人物更加规范了。————人模子
    def Dog(name,blood,aggr,kind):
        dog = {
            'name':name,
            'blood':blood,    #血量
            'aggr':aggr,       #攻击力
            'kind':kind
        }
        # 狗 咬人
        def bite(person):
            person['blood'] -= dog['aggr']
            print('%s被咬了,掉了%s的血' % (person['name'], dog['aggr']))
        dog ['bite'] = bite
        return dog
    
    
    dog = Dog('狗子',1000,100,'teddy')
    alex = Person('alex',100,1,'None')
    nezha = Person('哪吒',200,2,'None')
    print(alex)
    dog['bite'](alex)
    print(alex)
    #Dog 函数 和 Person 函数都是定义了一类事物
    #直到调用了函数,复制了之后才真的有了一个是实在的人和狗。
    #面向对象编程
    #所谓模子 就是 类 抽象的 我能知道有什么属性 有什么技能 但不能知道具体的值
    #dog alex nezha 就是对象 有具体的值,属性和技能都是根据类规范的

    2,初始面向对象

    class 类名:
        属性 = 'a'
    print(类名.属性 )
    #类名的作用 就是操作属性 查看属性
    
    class Person:           #类名
        country = 'China'   #创造了一个只要是这个类就一定有的属性
                            #类属性 静态属性
        def __init__(self,*args):   #初始化方法,self是对象,是一个而必须传的参数
            #print(self.__dict__)    #self就是一个可以存储很多属性的大字典
            self.name = args[0]     #往字典里添加属性的方式发生了一些改变
            self.blood = args[1]
            self.aggr = args [2]
            self.sex = args [3]
        def walk(self,n):   #方法,一般情况下必须传self参数,且必须写在第一个
                            #后面还可以传其他参数,是自由的。
            print('%s走走走,走了%d步'%(self.name,n))
    
    print(Person.country)
    print(Person.__dict__)
    alex = Person('alex',100,1,'None') # alex 对象 实例化
    print(alex.__dict__)#查看所有属性
    print(alex.name)    #查看属性的值
    # print(alex.blood)
    # print(alex.aggr)
    # print(alex.sex)
    #Person.walk(alex) #调用方法 类名.方法名(对象名)
    alex.walk(5) #Person.walk(alex)的简写
    # 对象 = 类名()
    #  过程:
        #  类名() 首先会创造出一个对象,创建了一个self变量
        #  调用了init方法,类名括号里的参数会被这里接收
        #  执行init方法
        #  返回self
    #对象能做的事情:
        #   操作属性
        #   调用方法
        #__dict__ 对于对象的属性,都可以通过字典的语法来修改属性的值。
    #类能做的事情:
        #实例化
        #调用方法   只不过要自己传递self参数
        #调用类中的属性,也就是调用静态属性
        #__dict__类中的属性,只能看,不能修改。
    #不管是 类名 还是 对象 都可以调用 __dict__ 属性
    print(Person.__dict__['country'])
    Person.__dict__['country'] = '印度'
    print(alex.__dict__['name'])
    alex.__dict__['name'] = '狗子'
    print(alex.__dict__['name'])
    alex.age = 99
    print(alex.__dict__)

    运行结果:

    {'name': 'alex', 'blood': 100, 'aggr': 1, 'sex': 'None'}
    alex被狗子咬了,掉了100的血
    {'name': 'alex', 'blood': 0, 'aggr': 1, 'sex': 'None'}
    {'name': '狗子', 'blood': 1000, 'aggr': 100, 'kind': 'teddy'}
    哪吒被狗子打了,掉了100的血
    {'name': '狗子', 'blood': 900, 'aggr': 100, 'kind': 'teddy'}
    

    2.2练习,以面向对象编程的思想实现下面的功能

    练习一:在终端输出如下信息
    小明,10岁,男,上山去砍柴
    小明,10岁,男,开车去东北
    小明,10岁,男,最爱大保健
    老李,90岁,男,上山去砍柴
    老李,90岁,男,开车去东北
    老李,90岁,男,最爱大保健
    老张...

    class Person:
        def __init__(self,name,age,sex,hobby):
            self.name = name
            self.age = age
            self.sex = sex
            self.hobby = hobby
        def climb(self):
            print('{0},{1}岁,{2},上山去砍柴'.format(self.name,self.age,self.sex))
        def love(self):
            print('{0},{1}岁,{2},最爱{3}'.format(self.name,self.age,self.sex,self.hobby))
        def driv(self):
            print('{0},{1}岁,{2},开车去东北'.format(self.name,self.age,self.sex))
    
    ming = Person('小明',10,'','大保健')
    li = Person('老李',90,'','大保健')
    zhang = Person ('老张',50,'','大保健')
    ming.climb()
    ming.driv()
    ming.love()
    
    li.climb()
    li.driv()
    li.love()
    
    zhang.climb()
    zhang.driv()
    zhang.love()

    运行结果:

    小明,10岁,男,上山去砍柴
    小明,10岁,男,开车去东北
    小明,10岁,男,最爱大保健
    老李,90岁,男,上山去砍柴
    老李,90岁,男,开车去东北
    老李,90岁,男,最爱大保健
    老张,50岁,男,上山去砍柴
    老张,50岁,男,开车去东北
    老张,50岁,男,最爱大保健
  • 相关阅读:
    how to uninstall devkit
    asp.net中bin目录下的 dll.refresh文件
    查找2个分支的共同父节点
    Three ways to do WCF instance management
    WCF Concurrency (Single, Multiple, and Reentrant) and Throttling
    检查string是否为double
    How to hide TabPage from TabControl
    获取当前系统中的时区
    git svn cygwin_exception
    lodoop打印控制具体解释
  • 原文地址:https://www.cnblogs.com/Dmail/p/11568584.html
Copyright © 2011-2022 走看看