Python里面有一句话:万物皆是对象

如何面向对象编程

  1. 设计类
  2. 创建类实例对象
  3. 实例对象调用方法

创建对象

  1. 在内存中为对象分配空间
  2. 调用初始化方法  __init__  为对象初始化

对象创建后,内存中就有一个对象的实例了

由此可见,一个类可以有很多个对象,每个对象都有属于自己的变量、方法;

  • 创建出来的 对象 叫做 类 的 实例
  • 创建对象的 行为 叫做 实例化
  • 对象的属性 叫做 实例属性
  • 对象调用的方法 叫做 实例方法

知识点

  • 每个对象都有自己独立的内存空间,保存自己的属性
  • 但是实例方法在内存中都只有一个,实例方法中的 self 就是实例对象的引用,当对象调用实例方法时,会默认把实例对象传给方法内部

如果不懂的话,看看下面代码的输出就知道啦; id() 是用于获取对象的内存地址

class person():
def __init__(self, name):
self.name = name
print(f"init-{self.name} ", id(self)) def test(self):
print(f"test-{self.name} ", id(self)) p1 = person("p1")
print("p1-", id(p1))
print("p1 fun-", id(p1.test())) print("") p2 = person("p2")
print("p2-", id(p2))
print("p2 fun-", id(p2.test())) print("调用方法对比:",id(p1.test()) == id(p2.test()))

执行结果

init-p1  1921848172840
p1- 1921848172840
test-p1 1921848172840
p1 fun- 140719454498016 init-p2 1921848175136
p2- 1921848175136
test-p2 1921848175136
p2 fun- 140719454498016
test-p1 1921848172840
test-p2 1921848175136
调用方法对比: True

类对象

  • 声明了一个类,它就是一个类对象
  • 程序运行时,在内存中就会创建一个类对象,有且只有一个哦
  • 类对象也有自己的属性和方法,分别叫做:类属性、类方法

实例变量和类变量

实例属性=实例变量

类属性=类变量

class Person():
name = "cool guy" if __name__ == "__main__":
p = Person()
print(p.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
print(Person.name) # 打印类的name属性 p.name = "bad guy" # 给实例绑定name属性
p.age = 12 # 给实例绑定age属性 print(p.age) # 实例找到age直接打印
print(p.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
print(Person.name) # 仍然打印类的name属性

执行结果

cool guy
cool guy
12
bad guy
cool guy

注意点

  • 在写代码时,要避免类属性和实例属性重名,否则实例变量会屏蔽掉类属性
  • 给实例绑定新的实例属性时,会直接覆盖掉重名的类属性

类方法会在下一篇幅介绍哦!

最新文章

  1. vs2012 发布web应用程序
  2. const char **
  3. Winform主窗体设计
  4. Sql Server优化之索引提示----我们为什么需要查询提示,Sql Server默认情况下优化策略选择的不足
  5. Linux下创建文本文件(vi/vim命令使用详解)
  6. 怎样将文件夹打包为jar包或war包
  7. TCP/IP详解学习笔记(1)-- 概述
  8. Wamp集成环境配置多站点
  9. BZOJ 3384: [Usaco2004 Nov]Apple Catching 接苹果( dp )
  10. jQuery与其它js库共用
  11. yuan 老师 之 Django
  12. Hbase记录-hbase部署
  13. linux中安装oracle数据库
  14. topcoder srm 535 div1
  15. web前端名人的博客微博Githu
  16. ado.net常用操作
  17. xgboost入门与实战(原理篇)
  18. MySQL慢查询mysqlsla
  19. ubuntu 下关闭apache服务自动启动
  20. [Selenium]刷新页面 Refresh page

热门文章

  1. VRRP笔记一:基本简介(注意iptables和selinux的问题)
  2. 数据操作-apply函数族
  3. Springboot整合Dubbo和Zookeeper
  4. Keepalived+Haproxy搭建高可用负载均衡
  5. C++扬帆远航——8(张三李四,等差数列)
  6. 使用 GitHub 开源项目申请 IntelliJ License
  7. 02ARM体系结构
  8. 没有图片的freemarker下载,备份
  9. 难住了同事:Java 方法调用到底是传值还是传引用
  10. Asp.Net Core EndPoint 终点路由工作原理解读