1. 面向对象初步认识

面向过程编程VS函数编程:减少重复代码,增强了可读性
面向对象编程VS函数编程优点:
①对相似功能的函数,同一个业务的函数进行归类、分类;
类:具有相同属性和功能的一类事物
对象:类的具体体现(具体到一个事物),对象间是不同的。
②要站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板实例化出来的,得到对象就是得到了一切。

2. 面向对象的结构

class 类名:	# 类名用驼峰法,首字母大写,不可用下划线
属性、方法
obj = 类名() # 实例化对象
# example
class Human:
mind = "有思想" # 类的属性(静态属性、静态字段)
language = "语言"
def work(self): # 动态方法
print("都会工作")
def eat(self):
print("都能吃饭")

3. 从类名的角度研究类

3.1 类名操作类中的属性

3.1.1 类名查看类中所有的内容

print(Human.__dict__)  # 方法会显示地址

3.1.2 类名操作类中的静态属性 万能的点

# 增
Human.body = "有头" # 类名.变量名="值"
# 删
def Human.mind
# 改
Human.mind = "学习" # 类名.变量名="改的值"
# 查
print(Human.language)

3.2 类名调用类中的方法

​ 一般类中的方法不会通过类名调用。

Human.work("参数")  # 必须传参,不用,没有意义

# 总结
一般类名就是操作类中的属性。

4. 从对象的角度研究类

4.1 类名()

类名():实例化过程,会得到一个返回值。返回值就是对象、实例。

实例化一个对象发生了三件事:
1. 开辟一个对象空间;(和类空间不同)
2. 自动执行__init__方法,并且将对象空间的地址传给self,属于隐形传参;(此时对象空间有两个名称:self、obj)
3. 运行__init__方法内的代码,给对象空间封装属性(与类空间无关,Human.__dict__无法显示对象中封装的属性。) 通过传参可以向对象内封装属性、传值。

class Human:
mind = "有思想"
language = "语言"
def __init__(self):
self.name = name
self.age = age def work(self):
print("能够工作") def eat(self):
print("可以吃饭")
obj = Human()

4.2 对象操作对象空间的属性

4.2.1 对象查看对象的空间所有的属性

print(obj.__dict__)   # 以字典的形式

4.2.2 对象操作对象空间的属性 (外部操作)

class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age def work(self):
print("能够工作") def eat(self):
print("可以吃饭")
obj = Human("meet",30)
# 增
obj.sex = "男"
# 删
del obj.name
# 改
obj.age = 18
# 查
print(obj.age)

4.2.3 对象查看类中的属性

​ 只能查看,不能修改类中的属性,否则只会增添到对象中的属性。对于可变数据类型,如列表,对象或类名都可以给列表内的元素进行增删改(地址不变)。

print(obj.mind)

4.2.4 对象调用类中的方法

class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age def work(self):
print(f"{self.name}今年{self.age}岁,能够工作") def eat(self):
print(f"{self.name}今年{self.age}岁,可以吃饭")
obj = Human("meet",30)
obj.work()
obj.eat()
self:本身来说就是类中的方法的第一个参数,会自动接收对象的内存地址。

5. 一个类可以实例化多个对象

class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age def work(self):
print(f"{self.name}今年{self.age}岁,能够工作") def eat(self):
print(f"{self.name}今年{self.age}岁,可以吃饭")
obj = Human("meet",30)
obj.work()
obj.eat()
obj1 = Human("alex",18)
obj1.work()
obj1.eat()
obj2 = Human("dsb0",20)
obj2.work()
obj2.eat()

python 21 面向对象的更多相关文章

  1. Python的面向对象1

    今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++  ,Java  ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...

  2. 10 . Python之面向对象

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象初识别 面向过程v ...

  3. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  4. Python的面向对象3

    接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...

  5. Python的面向对象2

    我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...

  6. My way to Python - Day05 - 面向对象-思维导图

    My way to Python - Day05 - 面向对象   思维导图

  7. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  8. Python之面向对象一

    引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...

  9. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

随机推荐

  1. Openstack中用keypair生成和访问虚机的方法

    Openstack中用keypair生成和访问虚机的方法 标签:task   iso   perm   cte   生成   复制   vol   rsa   sla Openstack中用镜像文件生 ...

  2. 关于 64位系统 java连接access 报错java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

    报错的原因是url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=E:/公司/2000.mdb"; 这样是不行 ...

  3. 【iOS】App Transport Security

    iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输.这也意味着所有的HTTP协议都强制使用了HTTPS ...

  4. JAVA-基础-数据类型转换

    一.类型的转换 java中数据具有类型.这些类型是可以相互进行转换的. 1.自动类型转换 六个和数字相关的基本类型,可以自动由小到大进行类型转换.但是反过来就不行. *注意,在整形自动转浮点型时,有可 ...

  5. C# Winform 自定义控件——TextBox

    效果:   描述: 类似html标签里input标签里的placeHolder属性,控件继承TextBox,拥有一个描述提示信息的字段_txtPlaceHolder,重写了消息处理函数WndProc, ...

  6. restapi(3)- MongoDBEngine : MongoDB Scala编程工具库

    最近刚好有同事在学习MongoDB,我们讨论过MongoDB应该置于服务器端然后通过web-service为客户端提供数据的上传下载服务.我们可以用上节讨论的respapi框架来实现针对MongoDB ...

  7. git开发流程

    典型的工作流程和做法是,由于你没有远程仓库的权限,你先在github通过fork,复制自己的一份远程仓库,然后通过clone你自己这个远程副本到本地,进行修改,修改后push到自己的githu远程副本 ...

  8. java中线程安全,线程死锁,线程通信快速入门

    一:多线程安全问题 ###1 引入 /* * 多线程并发访问同一个数据资源 * 3个线程,对一个票资源,出售 */ public class ThreadDemo { public static vo ...

  9. .net core web api部署到docker

    一.创建.net core web api 的Demo 修改部分代码 端口随意指定,ip用星号“*”,方便接下来docker虚拟网络自动分配ip 下一步是Dockerfile文件,如果发现你的项目中没 ...

  10. 【POJ - 3176】牛保龄球 (简单dp)

    牛保龄球 直接中文了 Descriptions 奶牛打保龄球时不使用实际的保龄球.它们各自取一个数字(在0..99范围内),然后排成一个标准的保龄球状三角形,如下所示: 7 3 8 8 1 0 2 7 ...