面向对象思想:

字典表示对象:

  不是太好 因为 变量 得一个个的赋值改值

{'name':'alex','blood':20,'attack':1,'sex':'不'}
{'name':'太亮','blood':20,'sex':'不'}
{'name':'alex','blood':20,'attack':1,'sex':'不'}

函数表示面向对象:

  对象赋值


#通过两个模子,捏出两个具体的角色
#抽象 : 只能知道有那些属性
#具体 : 可以描述他的属性的值的
def Person(name,hp,ad,sex):
dic = {'name':name,'blood':hp,'attack':ad,'sex':sex}
return dic
alex = Person('liuer',1,1,'Man') def Dog(name,hp,ad,sex):
dic = {'name':name,'blood':hp,'attack':ad,'sex':sex}
return dic
ret = Dog('小黑',3000,10,'哈士奇')
print(ret)

  对象之间发生关系

人打狗   狗咬人
#互相打
def fight(dog,person):
#狗掉血,就是人的攻击力
dog['blood']-= person['attack']
print('%s打了%s,%s掉了%s'%(person['name'],dog['name'],dog['name'],person['attack']))
def bite(dog,person):
person['blood'] -= dog['attack']
print('%s咬了%s,%s掉了%s'%(person['name'],dog['name'],dog['name'],person['attack']))
hei = Dog('小黑',3000,10,'哈士奇')
# fight(hei['blood'],person_ad=alex['attack'])
fight(hei,alex)
print(hei)
bite(hei,alex)
print(alex)

  不好的是,bite(a,b) ab两个元素,关系不明确 是 a bite b  还是 b bite a

改进 对象

  程序里dic['fight'] = fight    把函数 塞进了字典 可以通过  

  alex = Person('alex',20,1,'不详')   alex['fight'](hei) 调用  实现函数的嵌套

  但是为什么 return dic 返回 None 呢

# 给两个特定的属于特定角色的方法 设置了他的使用范围
# 让其他角色不能随意调用属于固定角色的方法
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
# 互相打
alex = Person('alex',20,1,'不详')
hei = Dog('小黑',3000,10,'哈士奇')
alex['fight'](hei)
hei['bite'](alex)

总结:

# 先思考这个程序中有几个角色
# 然后描述这个角色 属性和动作
# 把这个属性和动作都装到一个角色中
# 面向对象编程

面向对象语法:

# 对象 : 具有具体的属性值的 实际存在的例子
#实例
# 类:具有相同方法和属性的一类事物

  类总是大写字母开头

    两种方法调用类的元素

class 类名:
pass
#空类
class Dog: # 总是大写开头的
变量1 = 100
变量2 = 'abc'
变量3 = [(1,2),(3,4)]
print(Dog.__dict__) #{'__module__': '__main__', '变量1': 100, '变量2': 'abc', '变量3': [(1, 2), (3, 4)], '__dict__': <attribute '__dict__' of 'Dog' objects>, '__weakref__': <attribute '__weakref__' of 'Dog' objects>, '__doc__': None}
print(Dog.__dict__['变量1']) #
# 第二种方法常用
print(Dog.变量1) #
print(Dog) #<class '__main__.Dog'>
# 每一只狗 都需要自己的属性

  新建一个完整的类

class Dog:  # 狗模子  --类
def __init__(self,name,hp,ad,sex): #固定的 函数有默认参数
print('执行了') #self就可以当字典使用
print(name,hp,ad,sex)
self.name = name
self.blood = hp
self.ad = ad
self.sex = ad
# self.__dict__['name'] = name
# self.__dict__['blood'] = hp
# self.__dict__['ad'] =ad
# self.__dict__['sex'] = sex
print(self.__dict__)#{'name': 'alex', 'blood': 20, 'ad': 10, 'sex': '不祥'}
# 不用 return self 自己就传出来
# 具体的狗 对象 #自动的调用了Dog(对象) init
alex = Dog('alex',20,10,'不祥')# 默认有一个参数 传了了五个
#_init__() takes 1 positional argument but 5 were given
print(alex.__dict__)#{'name': 'alex', 'blood': 20, 'ad': 10, 'sex': '不祥'}
print(alex.name)
print(alex.blood)

  实例化

# 狗模子 狗对象 都是一个内存空间 字典
# self 实际上 就是由 python 语法 开辟了 一个属于具体的对象的空间
# 执行 init 想self 自动添加 key等属性
#返回self
# 对象 也是实例
#创建了一个对象 也是创建实例
# 实例化的过程:
#1,开辟了一块块空间,创造了一个self变量来指向这块空间
#2,调用init ,自动传self 参数,其他的参数都是按照顺序传进来的
#3,执行init
#4, 将self 自动返回调用者

  用的方法 而不是用函数的方法写 面向对象

class Dog:  # 狗模子  --类
a = 1000 #静态变量 这个类中的变量 是所有
def __init__(self,name,hp,ad,sex): #固定的 函数有默认参数
#self就可以当字典使用
print(name,hp,ad,sex) #实例变量 对象属性
self.name = name
self.blood = hp
self.ad = ad
self.type = sex
def bite(self,person): #定义在类的内部的 动态变量 方法
person.blood -= self.ad
# print(self)
# print(dog)
print('%s 咬了 %s,%s 掉了 %s血'%(self.name,person.name,person.name,self.ad))
dog1 = Dog('tai',200,20,'贵妇') # 对象 实例
# print(do.name)
# print(do.type) #引用实例变量 tai 引用对象的属性
# print(Dog.a) # 所有的静态变量的值都尽量用类名去操作
# print(alex.a)
class Person: # 人模子 --类
a = 1000 #静态变量 这个类中的变量 是所有
def __init__(self,name,hp,ad,sex): #固定的 函数有默认参数
print('执行了') #self就可以当字典使用
print(name,hp,ad,sex) #实例变量 对象属性
self.name = name
self.blood = hp
self.ad = ad
self.type = sex # 对象的资源
def fight(self,dog): #定义在类的内部的 动态变量 方法
dog.blood -= self.ad
print('%s 打了 %s , %s 掉了 %s血'%(self.name,dog.name,dog.name,self.ad)) # print('do 是',do) #do 是 <__main__.Dog object at 0x000000000289DDD8>
taibai = Person('taibai',20,20,'male')
print(taibai.fight(dog1))
taibai.fight(dog1)
dog1.bite(taibai)

 两种调用方法 :

    函数:ren['fight'](dog)       用fight 引用函数 ()  调用  dog是参数

    类:ren.fight(dog)   fight 是类的方法   dog 是另一个类的对象

python学习 day18 (3月25日)---( 面向对象浅析)的更多相关文章

  1. Python 学习日志9月19日

    9月19日 周二 今天是普通的一天,昨天也是普通的一天,刚才我差点忘记写日志,突然想起来有个事情没做,回来写. 今天早晨学习<Head First HTML and CSS>第十一章节“布 ...

  2. Python 学习日志9月20日

    9月20日 周三 多大年龄了,还活得像个小孩.——急什么,人生又不长. 你习惯了思考宇宙星辰,一百年真的不长,一生也就不那么长,许多人的价值观念你也就无法理解.同样,许多人也无法理解你的价值观念,感兴 ...

  3. Python学习日志9月17日 一周总结

    周一,9月11日 这天写的是过去一周的周总结,我从中找出当天的内容. 这天早晨给电脑折腾装机,早晨基本上没有学习,休息了一个早晨. 下午写的上周总结,完事做mooc爬虫课的作业,<Think P ...

  4. Python 学习日志9月21日

    9月21日 周四 今天是个特殊的日子吗,总感觉9月21这个日子听着怪怪的. 今天早晨看<Head First HTML and CSS>第13章节“表格和更多列表”,内容不多,看完并做了详 ...

  5. Python学习日志9月13日

    昨天的学习日志没有写,乱忙了一整天,政治电脑. 好奇心重,想要给电脑装上传说中LInux操作系统,各种小问题折腾到半夜,今天又折腾到晚上才真正的装上系统. 可是装上系统后又发现各种的不好用.虽然界面比 ...

  6. python学习 day19 (3月26日)----(对象组合)

    深谙:非常透彻地了解:熟悉内中情形.谙,读作‘ān’ 熟悉. 1.面向对象作用:规划了代码中的函数处理的是哪一类问题 解决了传参的问题 方便扩展 方便重用 2.类的定义和使用类当中有哪些成员 ''' ...

  7. Python学习日志9月16日

    刚才我差点睡着了,差资料的时候太费神,有些累. 今天早晨学习了<head first HTML and CSS>,今天把昨天没看了的关于字体和颜色的一章节看完了,真长.我详细的做了笔记,并 ...

  8. python学习 day21 (3月28日)----(抽象类 多态 nametuple dump)

    不要因为走的路太久了,而忘记了为了什么而出发. 提前作准备了吗?把思维导图的东西做了吗? 和工作了几年的人,相比,是不是相同的水平,如果要写简历的话. 一边学习,一边复习. 小就是大,少就是多. 1. ...

  9. Python学习日志9月15日

    一周就要过去了,而我跟一周以前没什么区别.回想一下,我这周做了什么事情呢.恍然若失.这周的精力都浪费在很多不必要的事情上了.学过一片古文,讲后羿学射箭,他有一个同学跟他一样聪明,在一起学习.后羿呢,专 ...

随机推荐

  1. mysql 5.7 基于GTID 主从同步的1236故障处理(其它事务故障等同)

    登录从库 stop slave; 查看执行事务 show slave status\G Retrieved_Gtid_Set:  Executed_Gtid_Set: ee3bdb44-f6a1-11 ...

  2. c++面向过程和面向对象-C++编译器是如何管理类和对象的

    1,c++编译时如何区分对象调用类的方法? C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段(栈区内存)和代 ...

  3. 筛素数 poj 2739

    题目链接:https://vjudge.net/problem/POJ-2739 输入一个数字n,判断有没有一段连续的素数之和大于n,如果有,计算总共有几种. 思路:用素数筛法求出10000以内的素数 ...

  4. git config --global user.email

    加上这个就ok

  5. 【Linux 线程】线程同步《一》

    1.线程同步概念 线程同步:在多个线程访问共享数据时,有先后次序. 在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程.但是多个线程同时运行的时候可能调用线程函数,在多个线程同时 ...

  6. centos下安装&&配置redis

    一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...

  7. SY-SUBRC

    一般是对read table和select语句使用. loop at g_it_data where level < <wa_data>-level and seq < < ...

  8. 微信小程序之 ----API接口

    1. wx.request 接口    可在文件 wxs中操作,连接服务器处理数据    参数    ① url ② data ③ header ④ method ⑤ dataType   回调   ...

  9. [z]根据awr报告查看最慢的sql语句

    http://blog.itpub.net/12679300/viewspace-2125679/ 当系统运行了一段时间后,系统基本也趋于稳定了,SQL调优也变了DBA的一个主要的工作内容,很多时候都 ...

  10. vue 获取组件 和 dom 对象 ref/el

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...