最近两周内容大概回顾:

# 文件操作
#
# 模块:random,序列化模块,时间模块,collections,re,os,sys
# 模块与包的概念和导入方法
# 写代码的规范
# 正则表达式
# 异常处理
#
# 函数:
# 函数的命名空间和作用域
# 内置函数
# 闭包 : 装饰器函数
# 生成器函数:生成器表达式,各种推导式,迭代器
# 匿名函数
# 递归函数 : 二分查找算法 #作业1
# 基础数据类型
# 文件操作
# 函数
# 模块
# 面向对象
# 网络编程(空)
# 线程进程协程、IO多路复用(空)
# 其他 # 序列化模块——shelve
# import shelve
# f = shelve.open('ff')
# f['key'] = {'k1':'v1'}
# f.close()
# f = shelve.open('ff',flag='r') # 只读
# f['key'] = [1,2,3]
# f.close()
# f = shelve.open('ff')
# print(f['key'])
# f.close()

今天内容概要:

# 认识面向对象
# 了解面向对象编程
# 基础的 类 对象的语法 初识面向对象:
#生命值 100
#攻击力 10
#名字 XXX
#职业 XXX
def Person(life_value,aggr,name,job):
def attack(dog):
print('%s 攻击了 %s' % (person['name'], dog['name']))
dog['life_value'] = dog['life_value'] - person['aggr']
person = { #模子
'life_value':life_value,#生命值
'aggr':aggr, #aggressive攻击力
'name':name,
'job' : job,
'attack' : attack
}
return person boss_gold = Person(1000,2,'金老板','boss')
alex = Person(250,250,'alex','big_boss')
# print(boss_gold['life_value']) def Dog(name,life_value,aggr,kind):
def bite(person):
print('%s 咬了 %s' % (dog['name'], person['name']))
person['life_value'] -= dog['aggr']
dog ={
'name':name,
'life_value':life_value,
'aggr' : aggr,
'kind' : kind,
'bite' : bite
}
return dog
alph = Dog('alphgou',10000,999,'AI')
flower = Dog('小花',150,300,'2ha')
alph['bite'](boss_gold)
alex['attack'](flower) #这就是面向对象编程
#面向对象编程 是一种思想
#对象就是具体的拥有准确属性值的一些变量
#类:一类具有相同属性和方法的事物
#字典 _ 类
d1 = {'k1':'v1'} #对象
#动物园:老虎 狮子 猴 # attack(boss_gold,flower)
# print(flower['life_value'])
# bite(alph,alex)
# print(alex['life_value'])

面向对象:

def 函数名():
'''函数体'''
pass # class Person: #类名有两个作用
# country = '中国' #静态属性、数据属性
# def walk(self): #动态属性、函数属性、方法
# print('walk') #1.属性引用
# print(Person.country) #静态属性的查看
# print(Person.walk)
# Person.role = '人' #添加一个新静态属性
# Person.country = '印度' #修改一个新静态属性
# del Person.role #删除一个静态属性
# print(Person.__dict__)
# print(Person.walk()) #报错 少self参数
# Person.__dict__['country'] = '印度' #报错 不能改变
# print(Person.__dict__['country'])
# print(Person.country) #类能完成的第二个功能:实例化对象
#实例化:从一个类中创造一个具体的对象的过程
# p = Person()
# print(p) #Person的对象 # class Person: #类名有两个作用
# country = '中国' #静态属性、数据属性
# def __init__(self,life_value,aggr,name,job): #初始化方法
# #self = {'lv':life_value}
# self.lv = life_value #属性,对象属性
# self.aggr = aggr
# self.name = name
# self.job = job
# def walk(self): #动态属性、函数属性、方法
# print('%s is walking'%self.name)
#
# # p = Person() #如何让对象拥有具体的属性
# p = Person(1000,2,'金老板','boss') #如何让对象拥有具体的属性
# p.walk() # Person.walk(p)
# print(p.lv) #Person的对象
# print(p.aggr) #Person的对象
# print(p.name) #Person的对象
# print(p.job) #Person的对象
# p.sex = 'lady_boy' #添加一个属性
# print(p.sex)
# p.sex = 'girl' #属性的修改
# print(p.sex) #属性的删除
# del p.sex # print(p.__dict__)
# print(p.__dict__['lv']) #查看
# p.__dict__['lv'] = 998 #对象名.__dict__中的属性值可以被修改
# print(p.__dict__['lv'],p.lv)
# p.__dict__['sex'] = 'lady_boy' #对象名.__dict__中的属性值可以增加
# print(p.__dict__,p.sex)
# p.__dict__.pop('sex') #对象名.__dict__中的属性值可以被删除
# print(p.__dict__)
#类
# 类的定义 class关键字 类名的首字母大写
# 类中直接定义属性:静态属性(变量) 和 动态属性(函数)
# 类名的两个作用:属性的引用,实例化对象
# 类名和属性的操作:对象名.属性名 对象名.__dict__['属性名'](不能修改) #实例化 ——类名(参数)
#构造方法:造对象
#初始化__init__:给这个赤裸裸的对象添加一些属性 __init__
#返回了一个初始化之后的对象 #__init__方法:初始化方法,可以没有。给对象添加一些必要的基础属性 #self的含义:就是这个对象本身 #对象和属性的操作:对象名.属性名 对象名.__dict__['属性名'] class Person: #类名有两个作用
country = '中国' #静态属性、数据属性
def __init__(self,life_value,aggr,name,job): #初始化方法
#self = {'lv':life_value}
self.lv = life_value #属性,对象属性
self.aggr = aggr
self.name = name
self.job = job
def walk(self): #动态属性、函数属性、方法
print('%s is walking'%self.name) boss_gold = Person(10,1,'太白太黑太亮','old_driver')
alex = Person(100,2.5,'张嘴闭嘴tesla','鸡汤哥')
# boss_gold.walk()
# alex.walk()
boss_gold.sex = 'None'
print(alex.__dict__)

面向对象交互:

#人类 :
# 属性 :life_value,aggr,name,job
# 方法: attack
class Person:
def __init__(self,life_value,aggr,name,job):
self.life = life_value
self.aggressive = aggr
self.name = name
self.job = job def attack(self,dog_obj): #boss_gold,tiedan
print('%s 攻击了 %s'%(self.name,dog_obj.name))
dog_obj.life = dog_obj.life - self.aggressive #狗类:
# 属性:life_value,aggr,name,kind
# 方法:bite
class Dog:
def __init__(self,life_value,aggr,name,kind):
self.life = life_value
self.aggressive = aggr
self.name = name
self.kind = kind def bite(self,person_obj):
print('%s 咬了 %s' % (self.name, person_obj.name))
person_obj.life -= self.aggressive tiedan = Dog(1000,100,'铁蛋','土狗')
boss_gold = Person(100,2.5,'太黑','old_driver')
# boss_gold.attack(tiedan) #Person.attack(boss_gold,tiedan)
# print(tiedan.life)
# tiedan.bite(boss_gold)
# print(boss_gold.life)
#三个攻击技能 #面向对象的交互
# 作业零:画图
# 基础数据类型
# 文件操作
# 函数
# 模块
# 面向对象
# 网络编程(空)
# 线程进程协程、IO多路复用(空)
# 其他 # 练习一:在终端输出如下信息
#
# 小明,10岁,男,上山去砍柴
# 小明,10岁,男,开车去东北
# 小明,10岁,男,最爱大保健
# 老李,90岁,男,上山去砍柴
# 老李,90岁,男,开车去东北
# 老李,90岁,男,最爱大保健
# 老张… # 练习二:
#创造一个圆形类,属性:半径,两个方法:求周长,求面积 # 练习三:
#继续写人狗大战游戏 # 预习:http://www.cnblogs.com/Eva-J/articles/7293890.html # 周末:神经网络公开课

==============================================================================================================================================================================================================================================================================

判断一个函数是方法还是一个类

from types import MethodType(方法),FunctionType(函数)
def func():
pass
print(isinstance(func,FunctionType)) # True class A():
def aaa(self):
pass
print(isinstance(aaa,FunctionType)) # True
a=A()
print(isinstance(a.aaa,MethodType)) # True要有实例化出来的对象才可以,如果只是用类名去调用的话还是function,只有用实例化出来的对象去调用才可以得到method 我们的函数只有跟我们的实例化出来的对象有绑定关系才能称之为方法,否则都是函数,即便它是写到类里面的方法,没有跟我们的类实例化出来的对象进行绑定,它依然是函数,而不是类里面的方法.

day23 面向对象 函数和方法区分的更多相关文章

  1. python之面向对象函数与方法,反射,双下方法

    一.函数和方法 1.函数和方法的区别 函数: 全都是显性传参,手动传参,与对象无关 方法: 存在隐性传参,与对象有关 1.1通过函数名可以判断 len()就是函数 str.count()就是方法 de ...

  2. 面向对象中特殊方法的补充、isinstance/issubclass/type、方法和函数、反射

    一.面向对象中特殊方法的补充 1.__str__ 能将对象名改成你想要的字符串,但是类型还是类 class Foo(object): def __init__(self): pass def func ...

  3. OO开发思想:面向对象的开发方法(Object oriented,OO)

    面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...

  4. python--区分函数和方法, 反射

    1.  isinstance,   type,   issubclass isinstance(): 判断你给的xxx对象是否是xxxxx类型的,只支持向上判断 isinstance(object, ...

  5. 学习笔记:jquery1.9版本后废弃的函数和方法

    jQuery1.9+ 废弃的函数和方法 升级Jquery版本遇到的问题 (转载自:http://www.ppblog.cn/jquery1-9live.html  版权归原作者所有) jQuery1. ...

  6. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

  7. call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.

    call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法. 注意:该函数的语法与 apply() 方法的语法几乎完全相同,唯一的区别在于,apply()方法接受的是一个参 ...

  8. 你不知道的JavaScript--Item8 函数,方法,构造函数调用

    1.函数调用 Function绝对是JavaScript中的重中之重.在JavaScript中,Function承担了procedures, methods, constructors甚至是class ...

  9. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

随机推荐

  1. R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列

    就是想保存下来,没有其他用意 原博文:http://blog.csdn.net/qq_26898461/article/details/53467968 3. 空间定位与检测     参考信息< ...

  2. Oracle存储过程中跳出循环的写法

    注:本文来源于: <  Oracle存储过程中跳出循环的写法   > Oracle存储过程中跳出循环的写法 记录exit和return的用法 1:exit用来跳出循环 loop IF V_ ...

  3. http之cdn介绍

    百度百科:CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调度等功能 ...

  4. ionic3 出现莫名广告

    应用上线出现 有莫名其妙的广告弹出. 1,DNS被劫持 2,第三方包带广告 3,Http被劫持 wifi和4G网都出现了广告,所以可以直接排除DNS被劫持的问题 广告页只会在H5的页面出现,所以基本可 ...

  5. clock gen sdk 代码笔记

    int ClockConfig(void) { u32 DIVCLK_DIVIDE = 10; u32 CLKFBOUT_MULT = 53; u32 CLKFBOUT_FRAC = 625; u32 ...

  6. LeetCode(72):编辑距离

    Hard! 题目描述: 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换 ...

  7. kali linux DVWA config 问题解决方案

    1.下载DVWA之后解压到 var/www/html目录下 unzip DVWA-master.zip -d /usr/www/html 2.配置 打开终端,执行以下命令: 将apache2停止:se ...

  8. Winhex数据恢复学习笔记(三)

    上次对文件系统进行简单的分析,这次就文件的镜像功能做一介绍 1.首先镜像的概念:镜像就是数据的副本,是原来数据在相同位置上以相同的排列模式生成的拷贝,所以镜像可以用来还原原始数据,代替原始数据工作,镜 ...

  9. Django注册页面配置设计

    一.上次回顾 Django数据的增查改删 models 中有userInfo 三个字段 user password phonenumber,models.userInfo.objects.all(). ...

  10. Java面向对象(二)

    一.封装 1.为什么要使用封装在类的外部直接操作类的属性是”不安全的"2.如何实现封装   1).属性私有化:设置属性的修饰符为private    2) .提供公共的set和get方法赋值 ...