018-Python 面向对象-类的定义、属性相关

话不多说,上代码,看结果。

print('1、基本理论#############################################')
print('1.1、 面向过程、面向对象##################################')
# 万物皆对象

# 面向过程、面向对象
# 都是一种解决问题的思路(思想)
# 面向过程   在解决问题的时候,关注的是解决问题的每一个的过程(步骤)
# 面向对象   在解决问题的时候,关注的是解决问题所需要的对象.
# 对比
# 面向对象和面向过程都是解决问题的一种方式(思想)   面向对象本身是对面向过程的封装.
# 面向过程编程最重要的是什么?   按照步骤划分    把一个任务,分解成具体的每一个步骤
# 面向对象编程最重要的什么?  按照功对象能进行划分    找到对象, 确定对象属性和行为
# 如何从面向过程编程的思想,过渡到面向对象编程?
# 	1. 一样的,列举出一个任务的具体实现步骤
# 	2. 试图分离这些实现步骤中的功能代码块
# 	3. 将这些功能代码块,划分到某一个对象中
# 	4. 根据这个对象以及对应的行为,抽象出对应的类

print('1.2、 什么是类###########################################')
# 类
# 某一个具体对象特征的抽象
# 根据抽象的类,生产具体的对象
# 类的组成   名称  属性  方法
# 以上属性和方法,都是抽象的概念
# 在产生对象之后,对象才拥有具体的属性值,和方法实现
# 对象和类的关系  对象  抽象  类  实例化  对象

print('2、面向对象在Python中的实践##############################')
print('2.1、创建类##############################')
# 如何定义一个类?
# 	class 类名:
#     pass


class XiongChuMo:
    pass


# 根据类创建对象
bear = XiongChuMo()

# 执行流程
# 1. 类的定义
# 2. 根据类,创建出一个对象
# 3. 将对象的唯一标识返回
print('2.2、属性相关##############################')
print('2.2.1、属性和变量的区别及判定依据?###################')

# 区别 概念   访问权限
# 概念
# 变量是“可以改变的量值”
# 属性是“属于某个对象的特性”
# 访问权限
# 变量:根据不同的位置,存在不同的访问权限   全局变量   局部变量
# 属性:只能通过对象来进行访问  所以,必须先找到对象  对象也是通过变量名来引用;而既然是变量,也有对应的访问权限
# 判定依据 是否存在宿主

print('2.2.2、对象属性###################')

# 怎样让一个对象拥有一些属性?(增)
# 直接通过对象,动态添加   对象.属性 = 值
# 通过类的初始化方法(构造方法)  __init__方法
bear.name = '虫二'
print(bear.name)

# 怎样访问一个对象的属性?(查)
# 一般访问   对象.属性  如果访问不到   会直接报错   需要记住错误提示
print(bear.name)

# print(bear.sex)  # AttributeError: 'Bear' object has no attribute 'sex'

# 怎样修改一个对象的属性?(改)
# 同新增一样;系统会自动识别,不存在则新增,存在则修改  对象.属性 = 值
bear.name = '虫大'
bear.sex = '雄性'
print(bear.name)
print(bear.sex)

# 怎样删除一个对象的属性?(删)   del 对象.属性
del bear.sex

# print(bear.sex)  # AttributeError: 'Bear' object has no attribute 'sex'

#  查看对象的所有属性?  对象.__dict__
print(bear.__dict__)

print('2.2.3、类属性###################')
# 万物皆对象,类也是一个对象
# 比如,生产月饼的模板,对于月饼来说它是“类”  但模板本身是不是也是一个具体的东西,也是由其他的东西创建出来的??

# 怎样让一个类拥有属性?(增)
# 类名.类属性 = 值
XiongChuMo.enemy = '光头强'

# class XiongChuMo:
# 	enemy = '光头强'
# 怎样查询一个类的属性?(查)
# 通过类访问  类名.类属性
print(XiongChuMo.enemy)
# 通过对象访问  对象.类属性
print(bear.enemy)

# 为什么可以通过对象访问到类属性?
# 和Python对象的属性查找机制有关
# 优先到对象自身去查找属性  找到则结束
# 如果没有找到  则根据__class__找到对象对应的类  到这个类里面查找

# 怎样修改一个类的属性?(改)
# 通过类名改 系统也会自动检测  不存在,则新增  存在,则修改  类名.属性 = 值
XiongChuMo.enemy = '天才威'
print(XiongChuMo.enemy)
# 能否通过对象改?  不能!
# bear.enemy = '天才威'  # 成新建一个属性了

# 怎样删除一个类的属性?(删)
# 通过类名删除  del 类名.属性
# 能否通过对象删除?  不能!  del 语句只删除直系属性
del XiongChuMo.enemy
print(XiongChuMo.__dict__)
# print(XiongChuMo.enemy)   # AttributeError: type object 'XiongChuMo' has no attribute 'enemy'

# 类属性的内存存储问题
# 一般情况下,属性存储在__dict__的字典当中    有些内置对象没有这个__dict__属性
# 一般对象可以直接修改__dict__属性  但类对象的__dict__为只读;默认无法修改  可以通过setattr方法修改
# 类属性被各个对象共享  类属性修改之后,所有的对象访问到的类属性都会跟着修改
# 查看一个类的所有属性   类名.__dict__


class WenJU:
    ruler = '10cm'
    pen = '英雄牌'
    pencil = '2b'


pen = WenJU()
pen.length = '10cm'
pen.paizi = '英雄'

print(pen.__dict__)
pen.__dict__['length'] = 11
pen.__dict__['color'] = '黑色'
print(pen.__dict__)

print(WenJU.__dict__)
# WenJU.__dict__['ruler'] = '123'     # TypeError: 'mappingproxy' object does not support item assignment

print('2.2.4、如何限制对象的属性?###################')
# 如何限制对象的属性?
# 通过设置类属性:__slots__  这个属性是一个列表
# 列表中的元素,即为通过这个类创建出的对象可以添加的对象属性
# 如果这个类实例出的对象,添加了非列表之内的属性,则会报错


class Lei:
    __slots__ = ['a']


q = Lei()
q.a = 123
# q.b = 12

print(q.a)
# print(q.b)    # AttributeError: 'Lei' object has no attribute 'b'

print('2.3、方法相关##############################')
print('2.3.1、 方法的概念###################')
# 方法的概念
# 描述一个目标的行为动作  比如描述一个人怎样吃,怎样喝,怎样玩...
# 和函数非常类似
# 都封装了一系列行为动作
# 都可以被调用的之后,执行一系列行为动作
# 最主要的区别就是:调用方式

结果如下图
在这里插入图片描述
就先这样,遇到别的再补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值