ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python - 面向对象(一)入门篇

2021-05-31 20:55:32  阅读:238  来源: 互联网

标签:p2 p1 name 面向对象 Python 入门篇 实例 print 属性


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

注意点

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

 

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

 

标签:p2,p1,name,面向对象,Python,入门篇,实例,print,属性
来源: https://blog.51cto.com/u_12020737/2838290

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有