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岁,男,最爱大保健