一、类

  • 最简单的经典类结构
class 类名:pass
复制代码

1、定义一个类

class Money:pass
复制代码

类名规范: 驼峰命名法, 并且首字母大写

2、实例化一个对象

  • 创建一个对象, 最简单的方式就是类名后加上小括号
one = Money()       # 创建一个Money类的实例化对象
复制代码
  • 可以打印查看类和对象
print(Money)
print(one)# 打印结果:
<class '__main__.Money'>
<__main__.Money object at 0x101dba588>
复制代码

3、关于类名

  • 上面的Money类
class Money:pass
复制代码
  • 其中的Money, 即表示类名, 又是一个变量

  • 我们先通过__name__, 可以查看Money的类名

print(Money.__name__)           # 打印结果: Money
复制代码
  • 定义一个新的变量, 接受Money的值
abc = Money
print(abc)
# 打印结果: <class '__main__.Money'>
复制代码
  • 使用abc创建一个对象
one = abc()
print(one)
# 打印结果: <__main__.Money object at 0x103d1f6d8>
复制代码
  • 可以给Money重新赋值
Money = 666
print(Money)            # 打印结果: 666
复制代码

结论: 在定义类的时候, 在内存中分配了一段空间, 用来存放类的信息, 同时又创建了一个与类同名的变量, 这个变量指向这个类

例如: 创建Money类时, 在内存中分配空间存放Money类的信息, 同时创建一个变量Money, 并且指向Money类, 我们可以创建变量abc, 来指向Money类。 然后直接使用abc可以创建Money类的实例化对象, 同时也可以将变量Money重新赋值

二、对象

  • 实例化对象: 在内存中分配一段空间存放对象信息

  • 我们可以使用一个变量指向这个对象, 通过变量使用对象

  • 所有的对象都有一个属性__calss__, 可以查看当前对象属于哪一个类

class Money:                # 定义类pass
one = Money()               # 创建对象, 并使用变量one引用这个对象
print(one.__class__)        # 打印: <class '__main__.Money'>
复制代码

1、添加属性

  • 定义一个Person类, 并实例化对象p
class Person:pass
p = Person()
复制代码
  • 可以直接使用对象.属性 = 值, 给对象添加属性
p.name = "zhangsan"
p.age = 18
p.height = 1.78
复制代码

2、查询属性

  • 可以使用对象.__dict__查看对象所有的属性
result = p.__dict__
print(result)
# 打印结果: {'name': 'zhangsan', 'age': 18, 'height': 1.78}
复制代码
  • 可以使用对象.属性, 查看属性值
print(p.name)           # 打印: zhangsan
print(p.age)            # 打印: 18
print(p.height)         # 打印: 1.78
复制代码
  • 如果查看对象不存在的属性, 那么会直接报错
print(p.sex)
# 报错: AttributeError: 'Person' object has no attribute 'sex'
复制代码

3、修改属性

  • 可以使用对象.属性 = 值, 来修改属性
p.age = 20
复制代码

4、删除属性

  • 使用del语句, 可以删除对象已有属性
print(p.__dict__)
del p.name
print(p.__dict__)# 打印结果:
{'name': 'zhangsan', 'age': 20, 'height': 1.78}
{'age': 20, 'height': 1.78}
复制代码
  • 删除所有属性
print(p.__dict__)
del p.__dict__
print(p.__dict__)# 打印结果:
{'name': 'zhangsan', 'age': 18, 'height': 1.78}
{}
复制代码

三、类的属性

1、添加属性

  • a. 使用类.属性 = 值, 可以给类添加属性
class Money:pass
Money.count = 1
复制代码
  • b. 在类的实现中添加属性
class Money:count = 1
复制代码

2、查看属性

  • 使用类.属性, 可以获取属性值
print(Money.count)          # 打印: 1
复制代码
  • 可以使用类.__dict__查看类的所有属性
print(Money.__dict__)# 打印结果:
{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Money' objects>, '__weakref__': <attribute '__weakref__' of 'Money' objects>, '__doc__': None, 'count': 1}
复制代码

'count': 1就是新添加的类属性, 至于其他属性都是类创建时系统添加的类属性

  • 如果查看不存在的属性, 会报错
print(Money.number)
# 报错: AttributeError: type object 'Money' has no attribute 'number'
复制代码

3、使用对象访问类中的属性

  • 定义Money类, 并添加countnum属性
class Money:    count = 1num = 666
复制代码
  • 实例化一个对象
one = Money()
复制代码
  • 通过对象.类属性, 访问类中的countnum属性
print(one.count)            # 打印: 1
print(one.num)              # 打印: 666
复制代码

当访问对象的某个属性时

  1. 如果对象本身拥有这个属性, 会直接使用
  2. 当对象本身没有这个属性时, 就会根据自身的__class__属性, 找到对应的类, 然后在类中查找属性
  3. 注意: 对象的__class__属性值是可以更改的, 如果__class__指向了其他的类, 那么就会在更改后的类中查找属性

4、修改属性

  • 通过类.属性, 修改类的属性
class Money:count = 1num = 666Money.count = 10print(Money.count)          # 打印结果: 10
复制代码
  • 通过对象.类属性, 修改属性时, 只是给自己本身添加一个属性, 而不是修改类属性
class Money:count = 1num = 666one = Money()           # 实例化对象 one
one.count = 10          # 给one添加属性count, 并赋值10
print(one.count)        # 打印one的属性count的值two = Money()           # 实例化对象 two
print(two.count)        # 打印two的count属性
print(Money.count)      # 打印类Money的类属性count# 打印结果
10                      # one添加count属性的值
1                       # two没有count属性, 查找Money中的count属性
1                       # 打印类Money中的属性count
复制代码
  • 类属性被对象共享, 当类属性的值改变时, 对象访问的类属性的值也会改变
class Money:count = 1one = Money()
two = Money()
print(one.count)            # 打印: 1
print(two.count)            # 打印: 1Money.count = 2             # 修改类属性为2print(one.count)            # 打印: 2
print(two.count)            # 打印: 2
复制代码

5、删除属性

  • 使用del 类.类属性, 可以删除类的属性
del Money.count
复制代码

无法通过del 对象.类属性, 删除类的属性, del语句只能删除直系属性

  • 类属性删除前, 实例化对象是可以访问该类属性的, 如果删除了类属性, 对象就无法再访问该类属性
class Money:count = 1num = 666one = Money()   print(one.count)        # 删除前通过对象, 打印: 1print(Money.count)      # 删除前通过类, 打印: 1del Money.count         # 删除类属性 countprint(one.count)        # 报错: AttributeError: 'Money' object has no attribute 'count'
复制代码

不管是类, 还是对象, 添加的属性都是放在了__dict__中, 对象可以通过修改__dict__修改属性, 而类需要一些其他的方法修改

四、限制对象添加属性

  1. 由于Python中的对象可以添加任何属性, 所以就可能导致同一个类创建的对象, 拥有不同的属性, 这可能给开发带来一定的麻烦
  2. 所以我们在定义类的时候, 就需要限制: 该类的对象只能添加某一些属性

可以使用__slots__限制对象添加哪一些属性

  • 定义一个Person类, 指定__slots__的值
class Person:__slots__ = ["age", "name"]
复制代码
  • 创建一个Person类的对象
p = Person()
复制代码
  • p添加几个属性, 并运行程序
p.age = 10
p.name = "zhangsan"
p.height = 1.78     # 报错: AttributeError: 'Person' object has no attribute 'height'
复制代码
  • 可以发现, p在添加agename时没有问题, 但是在添加height时有问题
  • 这说明在类的定义中, 如果指定了__slots__的值, 那么实例化对象只能添加__slots__中的属性, 而不能添加其他属性

Python基础(十八): 类和对象以及它们的属性相关推荐

  1. Python基础之初识类和对象

    我们在前面学习了解了面向过程编程,接下来我们一起来学习一下面向对象编程.其实不管是面向过程,还是面向对 象,说白了就是一种编程方式而已.既然是面向对象编程,顾名思义,此编程方式的落地需要使用 &quo ...

  2. python用来初始化对象属性的是_猪行天下之Python基础——8.1 类与对象

    内容简述: 1.面相对象的理解 2.类与对象 3.继承 4.组合 5.对象相关的内置函数 1.面相对象的理解 考虑到部分读者可能没有接触过面向对象编程,所以先介绍下面向对象的一些特征,形成一个面向对象 ...

  3. python基础教程:类和对象

    Python的类(class)是抽象的概念,是指一类实例对象的集合,该实例具有相同的属性和方法,而对象(object)是类的具体的实例. 类的定义语法如下所示,最重要的两个部分是属性和方法: clas ...

  4. python四十二:类和对象

    类有数据属性和函数属性, 但对象只有数据属性. def funName(args):'函数文档字符串'函数体class 类名:'类的文档字符串'类体创建一个类class foo:pass用类foo实例 ...

  5. Python基础(八)--迭代,生成器,装饰器与元类

    目录 Python基础(八)--迭代,生成器,装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2. ...

  6. Python基础十五:面向对象编程四:高级特性

    Python基础十五:面向对象编程四:高级特性 Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程 Author:yooongchun Em ...

  7. python如何对一个属性或方法进行封装_python 类、对象、方法、属性

    在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) ...

  8. JavaScript学习(四十八)—原型对象的增删改查

    JavaScript学习(四十八)-原型对象的增删改查 一.构造方法与原型对象的图解 二.型对象的增删改查 (一).什么是原型 每个函数都会有一个属性--prototype属性,这个属性都会有一个对象 ...

  9. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

最新文章

  1. python打包成exe_Python打包文件为exe,PyInstaller应用
  2. mybatis学习6复杂查询之一对多的处理
  3. Linux shell关系运算
  4. Linux5观察doc目录并截屏,linux截屏命令
  5. java 调用jira_java调用jira接口
  6. sql crud_使用适用于SQL Server的Python SQL库执行CRUD操作
  7. python文件夹,文件监听工具(pyinotify,watchdog)
  8. 理论物理极础11:电力和磁力
  9. pclint如何不检查头文件_衡水中学优秀班主任:考试时如何检查,才能不丢分?3个技巧...
  10. python学习笔记(52周存钱挑战)
  11. 微信wifi服务器地址,微信连WIFI服务器时钟不同步
  12. 《Linux操作系统-基础笔记》第6章 编译调试工具(GCC、GDB)
  13. 克隆Linux虚拟机
  14. 70后.net老猿,尚能饭否?
  15. 小程序如何本地去水印,基于很多小白写的教程
  16. 浏览器翻译功能在哪里,如何使用浏览器翻译网页
  17. 股票模拟交易日志(一)
  18. 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (1/3)
  19. 苹果Mac电脑清理垃圾软件卸载工具CleanMyMac X
  20. 转载:ubuntu教程

热门文章

  1. 心语收集11:我们可以经得起心脏的千疮百孔,可以接受感情的支离破碎,却不愿喝下忘情水,忘记那曾经爱过的人。...
  2. 都是自私惹的祸? 论蹭网再触道德底线
  3. 灰度实战(三):Apollo配置中心(3)
  4. 智能一代云平台(二十二):多租户方案比较Hibernate、EclipseLink、Mybatis+Mycat
  5. 训练史上最佳GAN用了512块TPU,一作自述:这不是算法进步,是算力进步
  6. 这位勇士,你别去读博了:搞机器学习要PhD何用?
  7. 尴尬……无人车美国赌城上路不到一小时就撞了
  8. 企业生产环境数据库备份锁表问题
  9. 谨慎设计方法签名(40)
  10. Adobe正式在中国市场推出Creative Cloud创意应用软件