类对象、类属性与实例对象、实例属性的区别

在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性。类属性在内存中只有一份,在__init__外部定义。

通过类创建的对象称为实例对象,描述实例对象的属性称为实例属性。实例属性在各自对象的内存中都保存一份,在__init__方法内部定义。

实例方法、类方法、静态方法的区别

这三种方法都是保存在类的内存中,调用者不同。

  • 实例方法由对象调用,至少一个self参数,self代表对象的引用。
  • 类方法有类调用,至少一个cls参数,并且需要装饰器@classmethod修饰。
  • 静态方法由类调用,不需要参数,需要装饰器@staticmethod修饰。

创建原则:

  • 只要访问了成员变量的方法都叫实例方法
  • 只访问类变量的方法叫类方法
  • 既不访问成员变量,也不访问类变量的方法叫成静态方法

举例说明

class Car(object):      # 类对象
car_num = 0 # 类属性,在__init__外部定义。 def __init__(self, brand, price):
self.brand = brand # 实例属性,在__init__内部定义
self.price = price
Car.car_num += 1 def level(self): # 实例方法,调用了实例属性
if self.price > 300000:
print(f"{self.brand}是高级轿车")
else:
print(f"{self.brand}是非高级轿车") @classmethod
def car_count(cls): # 类方法,只访问类变量
print(f"我有{cls.car_num}辆车") @staticmethod
def tips(): # 静态方法,既不访问成员变量,也不访问类变量
print("温馨提示:开车不喝酒") if __name__ == "__main__":
bmw = Car("宝马", 200000) # 通过类创建的对象称为实例对象
bmw.level()
wlhg = Car("五菱宏光", 400000)
wlhg.level()
Car.car_count() # 调用类方法
Car.tips() # 调用静态方法

为什么会有静态方法?

静态方法既不访问成员变量,也不访问类变量,若写个和class同级别的def函数也能实现同样的功能,何必定义个静态方法呢?定义静态方法主要是规避两个模块调用同名函数的情况,

假设一个场景:为Car类定义一个同级别的def tips函数,再为Animal类定义一个同级别的def tips函数

class Car(object):
pass def tips():
print("温馨提示:开车不喝酒") class Animal(object):
pass def tips():
print("温馨提示:不要伸手投食")

在python中,前面定义的函数会被后定义的同名函数覆盖,也就是说,按上面的场景调用tips 方法最终都调用的都是最后一个。为了明确各个tips所属类,于是就定义了静态方法。

python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法的更多相关文章

  1. python中类的输出或类的实例输出为何是<__main__类名 object at xxxx>这种形式?

    原因: __str__()这个特殊方法将对象转换为字符串的结果 效果图: 代码: # 定义一个Person类 class Person(object): """人类&qu ...

  2. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  3. Python学习 Day 7 面向对象 类和实例 访问限制

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

  4. python基础教程:定义类创建实例

    类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 >>>class Person(object): #所有的类都是从object类继承 pass #pass ...

  5. Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)

    总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...

  6. python从入门到大神---1、初始化实例、类属性、方法

    python从入门到大神---1.初始化实例.类属性.方法 一.总结 一句话总结: 方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f() 1 ...

  7. python 面向对象之封装与类与对象

    封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...

  8. 【python系统学习13】类(class)与对象(object)

    目录: 类(class)和实例 类 实例 小测试 对象(object) 属性和方法 类的创建 伪代码 示例代码 属性(attribute) 方法(method) 类的实例化 实例对象调用类属性和方法 ...

  9. Python笔记day20-面向对象

    目录 面向对象 1 装饰器 1.1 装饰器是什么? 1.2 装饰器 2 面向对象 (Object Oriented) 简称OO 2.1 面向对象相关术语 2.2 类和对象 2.3 类和对象的实现和书写 ...

  10. Python 简明教程 --- 20,Python 类中的属性与方法

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 与客户保持良好的关系可以使生产率加倍. -- Larry Bernstain 目录 类中的变量称为属 ...

随机推荐

  1. 过滤敏感词工具类SensitiveFilter

    网上过滤敏感词工具类有的存在挺多bug,这是我自己改用的过滤敏感词工具类,目前来说没啥bug,如果有bug欢迎在评论指出 使用前缀树 Trie 实现的过滤敏感词,树节点用静态内部类表示了,都写在一个 ...

  2. C# 温故知新 第一篇 C# 与 .net 的关系

    C# 与.net 的关系很多初学者或者未从事过.net 研发的编程人员 都不是很清楚,认为 C# 与.net 是一回事. 我们经常说java开发,C++开发,指的是两种开发语言:但是 经常看到 .ne ...

  3. 如何查看电脑IP地址

    如何查看电脑的IP地址 win+r输入cmd回车,然后输入:ipconfig回车

  4. Svelte入门——Web Components实现跨框架组件复用(二)

    在上节中,我们一起了解了如何使用Svelte封装Web Component,从而实现在不同页面间使用电子表格组件. Svelte封装组件跨框架复用,带来的好处也十分明显: 1.使用框架开发,更容易维护 ...

  5. 再识ret2syscall

    当初学rop学到的ret2syscall,对int 0x80中断了解还不是很深,这次又复习了一遍.虽然很简单,但是还是学到了新东西.那么我们就从ret2syscall开始吧. IDA一打开的时候,就看 ...

  6. 数据库函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

  7. Python学习问题汇总

    个人Python学习过程中遇到问题汇总,不断更新. 一.读取文件是报FileNotFoundError: 前期了解:python是在当前执行文件所在的目录中查找文件. 解决方法: 1.查看输入文件名是 ...

  8. Java网络多线程开发:java.io.EOFException

    Java网络多线程开发:java.io.EOFException 在实现韩顺平Java的多用户即使通信系统实战项目中: 对于客户端线程的停止,老韩是向服务器端发送一个消息对象,提示服务器端进行资源释放 ...

  9. CF424A Squats 题解

    Content 给定一个长度为 \(n\) 的仅由 x 和 X 组成的字符串,求使得字符串中 x 和 X 的数量相等需要修改的次数,并输出修改后的字符串. 数据范围:\(2\leqslant n\le ...

  10. python3 迭代器&生成器

    前戏:列表生成式 等于 用列表生成式生成列表.需要将所有数据生成到内存中,占用空间,如果数据太多.生成数据就会耗时较久. 例如需要运行卡顿一下..... 定义一个生成器:定义时不生成任何数据,只有通过 ...