Python面向对象Day1
一、面向对象初始
面向过程变成属于流水式
面向对象是一种思想
结构上理解面向对象:两部分
class A: # 类
name = '小明' # 静态属性,静态变量,静态字段,或者属性、变量、字段 def func(self): # 函数、动态属性、方法
pass
函数和面向对象的区别:
①.函数封装一个功能,而面向对象封装多个功能
②.面向对象比较抽象,它是一种思想,要站在上帝的角度去理解它
③.程序可扩展,对象都是一个个独立的。既有耦合性又有差异性
二、类、对象
类:具有相同属性或者功能的一类事物,类包含属性和方法。例如:人类、猫类、狗类;
对象:对象是类的具体体现(独一无二),例如:具体到事物,每个事物是独立的。
三、类名的使用
类:类似于一个公共框架,一个公共模型
定义类:
class 类名:
属性
方法
① 查看类中的所有属性及方法__dict__
主要用途:类名.__dict__ 查看类的所有方法和属性
返回的是字典,__dict__只有一个功能,就是查看所有的属性和方法,也能查看单独的属性及方法,但是不能增删改
使用:类名.__dict__
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') print(Person.__dict__) # 查看类的所有属性和方法,以字典的形式返回 # 结果
{'__module__': '__main__', 'name': '小明', 'age': 18, 'eat': <function Person.eat at 0x0000021D7A978AE8>, 'sleep': <function Person.sleep at 0x0000021D7A978950>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
单独查看属性(不建议使用)
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') print(Person.__dict__['name']) # 单独查看属性 # 结果
小明
② 查看类中单独的属性或者方法,用万能的点
使用:类名.属性(方法)
除了查看属性,还能对属性增删改
查:
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') print(Person.age) # 单独查看类的属性
print(Person.__dict__) # 查看类的所有属性和方法,以字典的形式返回 # 结果
18
{'__module__': '__main__', 'name': '小明', 'age': 18, 'eat': <function Person.eat at 0x000001B497B98AE8>, 'sleep': <function Person.sleep at 0x000001B497B98950>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
增:
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') Person.hoppy = 'football' # 在类中增加一个属性
print(Person.__dict__) # 查看类的所有属性和方法,以字典的形式返回 # 结果
{'__module__': '__main__', 'name': '小明', 'age': 18, 'eat': <function Person.eat at 0x000002019FFD8AE8>, 'sleep': <function Person.sleep at 0x000002019FFD8950>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None, 'hoppy': 'football'}
改:
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') Person.name = '小白' # 修改属性
print(Person.name)
print(Person.__dict__) # 结果
小白
{'__module__': '__main__', 'name': '小白', 'age': 18, 'eat': <function Person.eat at 0x00000196D23A8AE8>, 'sleep': <function Person.sleep at 0x00000196D23A8950>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
删:
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') del Person.age # 删除属性
print(Person.__dict__) # 结果
{'__module__': '__main__', 'name': '小明', 'eat': <function Person.eat at 0x000002312E698AE8>, 'sleep': <function Person.sleep at 0x000002312E698950>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
③ 类内的方法的操作
一般不通过类名操作!!使用类的实例化对象来操作
使用:类名.方法(参数)
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') Person.eat(1) # 调用类的方法,需要实参 # 结果
在吃饭
类名.__dict__[方法名](参数) 不建议使用
class Person:
name = '小明' # 属性
age = 18 def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') Person.__dict__['eat'](1) # 用__dict__的key调用方法,不建议使用 # 结果
在吃饭
类中的特殊方法,用于实例化对象
def __init__(self):
pass
def __init__(self): # 类中的特殊方法,用于实例化对象
pass
类的实例化对象
class Person:
name = '小明' # 属性
age = 18 def __init__(self): # 类中的特殊方法,用于实例化对象
pass def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person() # 实例化对象
类名() 这个过程就是实例化过程,它会实例化一个对象(它会给内存实例化一个对象空间)
obj = 类名() 把内存实例化的空间赋值给obj
实例化过程内部进行了三个阶段:
① 在内存中开辟一个类对象空间,产生一个类对象指针
② 它会根据指针找到类的__init__的方法,自动执行类中的__init__方法,并且将对象空间自动传给self参数,其他参数手动传入
③ 执行__init__的方法,给类对象空间封装相应的属性
def __init__(self): 功能:给对象封装属性的
四、对象
对象里不能定义方法,对象只能封装静态属性
①对象操作对象空间
对象.__dict__ 以字典的形式返回封装的属性,查看对象的所有属性
class Person:
name = '小明' # 属性
age = 18 def __init__(self,hobby,job): # 给实例化对象定义属性,必须提供参数才能实例化
self.hobby = hobby
self.job = job def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person('football','IT') # 实例化对象
print(obj.__dict__) # 查看对象的所有属性 # 结果
{'hobby': 'football', 'job': 'IT'}
对象操作对象的属性方式:增删改查
增(属性不存在与对象空间):
class Person:
name = '小明' # 属性
age = 18 def __init__(self,hobby,job): # 给实例化对象定义属性,必须提供参数才能实例化
self.hobby = hobby
self.job = job def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person('football','IT') # 实例化对象
obj.age = 20 # 对象创建一个属性
print(obj.__dict__) # 查看对象的所有属性 # 结果
{'hobby': 'football', 'job': 'IT', 'age': 20}
改(属性存在与对象空间):
class Person:
name = '小明' # 属性
age = 18 def __init__(self,hobby,job): # 给实例化对象定义属性,必须提供参数才能实例化
self.hobby = hobby
self.job = job def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person('football','IT') # 实例化对象
obj.age = 20 # 对象创建一个属性
print(obj.__dict__) # 查看对象的所有属性
obj.age = 15 # 修改对象的属性
print(obj.__dict__) # 查看对象的所有属性 # 结果
{'hobby': 'football', 'job': 'IT', 'age': 20}
{'hobby': 'football', 'job': 'IT', 'age': 15}
删:
class Person:
name = '小明' # 属性
age = 18 def __init__(self,hobby,job): # 给实例化对象定义属性,必须提供参数才能实例化
self.hobby = hobby
self.job = job def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person('football','IT') # 实例化对象
print(obj.__dict__) # 查看对象的所有属性
del obj.hobby # 删除对象的属性
print(obj.__dict__) # 查看对象的所有属性 # 结果
{'hobby': 'football', 'job': 'IT'}
{'job': 'IT'}
查:
class Person:
name = '小明' # 属性
age = 18 def __init__(self,hobby,job): # 给实例化对象定义属性,必须提供参数才能实例化
self.hobby = hobby
self.job = job def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person('football','IT') # 实例化对象
print(obj.job) # 查看某一属性的值 # 结果
IT
②对象操作类空间的属性
只能通过对象查询类空间的属性,不能修改,因为一旦修改就是给对象增加属性
class Person:
name = '小明' # 属性
age = 18 def __init__(self,hobby,job): # 给实例化对象定义属性,必须提供参数才能实例化
self.hobby = hobby
self.job = job def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person('football','IT') # 实例化对象
print(Person.__dict__)
print(obj.__dict__)
obj.name = '小白'
print(Person.__dict__)
print(obj.__dict__) # 结果
{'__module__': '__main__', 'name': '小明', 'age': 18, '__init__': <function Person.__init__ at 0x000001DB42518AE8>, 'eat': <function Person.eat at 0x000001DB42518950>, 'sleep': <function Person.sleep at 0x000001DB42518A60>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
{'hobby': 'football', 'job': 'IT'}
{'__module__': '__main__', 'name': '小明', 'age': 18, '__init__': <function Person.__init__ at 0x000001DB42518AE8>, 'eat': <function Person.eat at 0x000001DB42518950>, 'sleep': <function Person.sleep at 0x000001DB42518A60>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
{'hobby': 'football', 'job': 'IT', 'name': '小白'}
③ 对象操作类空间的方法:
对象.类空间的方法()
类名.类空间方法(对象)
class Person:
name = '小明' # 属性
age = 18 def __init__(self,hobby,job): # 给实例化对象定义属性,必须提供参数才能实例化
self.hobby = hobby
self.job = job def eat(self): # 方法
print('在吃饭') def sleep(self):
print('在睡觉') obj = Person('football','IT') # 实例化对象
obj.sleep() # 调用类空间的方法 # 结果
在睡觉
五、类名称空间、对象名称空间
实例化对象调用类中的属性与方法(内存级别)
类对象指针:对象与类的指向关系
① 对象能调用类中的属性与方法
obj.属性名 先从自己的空间去找,没有此属性它会通过类对象指针从类中去找,类中找不到,会从父类去找属性
② 类不能调用对象的属性
类不存在指向对象的值,找不到值;类只是公共的模板,对象的不同在__init__体现
对象能操作模板,模板不能操控类
③ 对象与对象之间不能互相调用
两个独立的空间是互相不能访问的,同一类实例化的对象之间是不能互相访问,不同类实例化的对象有可能访问
给对象封装属性:__init__或者任意位置增加;但是属性一般都封装在__init__
Python面向对象Day1的更多相关文章
- python 面向对象编程(一)
一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...
- Python面向对象的高级编程
数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念. 使用__slots__ ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- LeetCode_263. Ugly Number
263. Ugly Number Easy Write a program to check whether a given number is an ugly number. Ugly number ...
- LeetCode_235. Lowest Common Ancestor of a Binary Search Tree
235. Lowest Common Ancestor of a Binary Search Tree Easy Given a binary search tree (BST), find the ...
- python 工具的URL
Python取得大数据之后如何把数据图形化,之后让客户很清晰的看到你的结果 下面的图形化参照 matplotlib.3.0.2 https://matplotlib.org/gallery/index ...
- Qt跨平台原理
Qt跨平台原理: 和java一样,针对每一种OS平台,QT都有一套对应的底层类库,而接口是完全一致的. 因此只要是在QT库上开发的程序,放在任何一种平台下都可以编译运行(前提条件是:程序中没有使用某O ...
- e.g. i.e. etc. et al. w.r.t. i.i.d.英文论文中的缩写语
e.g. i.e. etc. et al. w.r.t. i.i.d. 用法:, e.g., || , i.e., || , etc. || et al., || w.r.t. || i.i.d. e ...
- QPS、TPS和系统吞吐量
QPS:Queries Per Second,每秒查询率.是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS:Transactions Per ...
- [转帖]HAProxy 7层 负载均衡
HAProxy 7层 负载均衡 https://www.cnblogs.com/jicki/p/5546902.html HAProxy 系统 CentOS 5.8 x64 wget http://h ...
- [转帖]crontab每小时运行一次
crontab每小时运行一次 先给出crontab的语法格式 对于网上很多给出的每小时定时任务写法,可以说绝大多数都是错误的!比如对于下面的这种写法: 00 * * * * #每隔一小时执行一 ...
- C++标识符的作用域与可见性
一.标识符的作用域与可见性 作用域讨论的是标识符的有效范围,可见性讨论的是标识符是否可以被引用. 二.作用域 作用域是一个标识符在程序正文中有效的区域.C++中标识符的作用域有函数原型作用域.局部作用 ...
- HTML5从入门到精通(千锋教育)免费电子版+PDF下载
本书是HTML5初学者极好的入门教材之一,内容通俗易懂.由浅入深.循序渐进.本书内容覆盖全面.讲解详细,其中包括标签语义化.标签使用规范.选择器类型.盒模型.标签分类.样式重置.CSS优化.Photo ...