Python面向对象之什么是类(1)
1、C#、Java :只能用面向对象编程
Ruby、Python :函数编程+ 面向对象
面向对象编程不是在所有地方都比函数式编程方便的,类是为了封装,下面是简单的使用方法

在创建类的时候要用class再加上一个类名,然后加上方法,调用类里面的方法必须先实例化一个类,然后使用事例去执行类里面的方法。
每次实例化的时候其实都是如图上一样,先在内存里面开辟一块空间,然后这个实例有一个类内存指针,告诉自己是由那个类创建的
2、在执行类的方法的时候,Python内部会将实例会作为self参数传进去,如下面代码
class Boo():
def ab(self,arg):
print(arg,self)
def cd(self,arg2):
print(arg2) obj1=Boo()
obj1.ab('1')#通过obj1调用这个方法,boj1会先去类里面寻找这个方法再执行,但是这个类需要两个参数,obj1会作为第一个self参数传进去
print(obj1)
结果如下图

面向对象有一个重要功能是封装,如下面代码
class Boo():
def ab(self):
print(self.arg)#这里arg是类本身的一个属性
def cd(self):
print(self.arg) obj1=Boo()
obj1.arg= '1'#把方法封装进去,以后类的方法里面只要调用self.org就可以调用这个值了
obj1.ab()
obj1.cd()
#执行结果就是打印了两个1
上面是一种封装方式,但是是非主流的,我们也可以在类里面进行封装操作,
class Boo():
def __init__(self,age):#这个init函数在实例类的时候会自动执行,叫构造方法,self指的是具体的实例
self.name = 'Jay'#实例的时候name和age属性会被封装进具体实例
self.age = age #age这个属性是根据我们实例化时候传进的参数决定的
def abc(self):
print(self) obj1 = Boo('33')#实际是初始化 print(obj1.age,obj1.name)#打印出这两个属性
其实在解析器在内存里面销毁这个对象的时候会默认自动执行一个__del__方法,叫析构方法,这在其他语言也适用
初始化类之后,我们也可以通过反射查找类里面的属性和方法
class god:
def __init__(self,name):
self.name =name
def shit(self):
print('shit')
def she(self):
print('黄赌毒')
obj = god('Jay')
r1=hasattr(obj,'shit')#查找对象里面是否含有该方法或者属性
r2=hasattr(obj,'name')
r3 = hasattr(obj,'age')
print(r1,r2,r3)
执行结果是True True False
Python面向对象之什么是类(1)的更多相关文章
- Python面向对象篇之元类,附Django Model核心原理
关于元类,我写过一篇,如果你只是了解元类,看下面这一篇就足够了. Python面向对象之类的方法和属性 本篇是深度解剖,如果你觉得元类用不到,呵呵,那是因为你不了解Django. 在Python中有一 ...
- python 面向对象之封装与类与对象
封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...
- 【转】python面向对象中的元类
type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello.py模块: class Hel ...
- python 面向对象进阶之元类metaclass
一:知识储备 exec exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域(字典形式),如果不指定,默认为globals() 参数三:局部作用域(字典形式),如果不指定,默认为local ...
- python面向对象的特点,类定义等,私有属性、公有属性、成员属性
引子:类的对象在内存中的表示def dog(name,dog_type): def bark(d): print(d,'wang wang wang ...') data = { 'name':nam ...
- python面向对象高级:定制类
Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类. 比如: __str__ 与__repr____iter____getitem____call__ __str__ 与__r ...
- python 面向对象十二 元类
一.类也是对象 只要使用关键字class,Python解释器在执行的时候就会创建一个对象.下面的代码段: class ObjectCreator(object): pass 将在内存中创建一个对象,名 ...
- Python面向对象 | 抽象类和接口类
一.抽象类(规范的编程模式) 什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化.抽象类的本质还是类,指的是一组类的相似性,而接口只强调函数属性的相似性. 为什么要有抽象类 ...
- 第四百一十三节,python面向对象,组合、类创建的本质、依赖注入
组合 组合举例组合就是多个类,或者若干类联合起来完成一个任务下面举例两个类联合起来完成一个任务为了降低代码的耦合度,我们一般不会在一个类里实例化另外一个类,都是将一个类在外面实例化后传参到另外一个来这 ...
随机推荐
- Handling Exceptions
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Exceptions/Tasks/Handling ...
- 【洛谷4149】[IOI2011] Race(点分治)
点此看题面 大致题意: 给你一棵树,问长度为\(K\)的路径至少由几条边构成. 点分治 这题应该比较显然是点分治. 主要思路 与常见的点分治套路一样,由于\(K≤1000000\),因此我们可以考虑开 ...
- python_31_集合
# 集合是一个无序的,不重复的数据组合,它的主要作用如下: # 去重,把一个列表变成集合,就自动去重了 # 关系测试,测试两组数据之前的交集.差集.并集等关系 s = set([3, 5, 9, 10 ...
- 【Python全栈-CSS】background背景
background背景 一.背景图片 background-image: url("img/num.png"); background-position-x: -200px ; ...
- vue列表过渡效果
<transition-group></transition-group> ① 列表 <transition-group> </transition-grou ...
- vue使用animate.css类库实现动画
首先安装animate.css类库 cnpm install animate.css –save 然后在vue的script文件中引用 import $ from '../assets/js/jque ...
- MySQL 5.6常用参数配置及说明
[client] user = root password = Yong_110 [mysql] prompt = [\\u@\\p][\\d]>\\_ no-auto-rehash [mysq ...
- k8s资源配置清单的书写格式(yaml文件)
yaml文件书写格式:5大类:apiVersion: 选择kubectl api-versions里面存在的版本kind: 选择kubectl api-resources结果中的对象资源metadat ...
- oracle一些常用的数据类型
字符数据类型 char数据类型 当需要固定长度时,使用char数据类型,此数据类型长度可以使1-2000字节.若是不指定大小默认占1字节,如果长度有空余时会以空格进行填充,如果大于设定长度 数据库则会 ...
- EventUtil处理js兼容性问题
var EventUtil={ addHandler:function(element,type,handler){ //添加事件 if(element.addEventListener){ elem ...