• 静态属性:

类调用函数属性时,需要先将类实例化,再将实例作为函数属性传入;类的实例调用函数属性时需要在后面加括号。

  1. class Building:
  2. def __init__(self, name, owner, width, length):
  3. self.name = name
  4. self.owner = owner
  5. self.width = width
  6. self.length = length
  7.  
  8. def a(self):
  9. print('a')
  10.  
  11. def cal_area(self):
  12. return self.length * self.width
  13.  
  14. B1 = Building('艺术楼', '艺术学院', 100, 100)
  15. print(Building.cal_area)
  16. # <function Building.cal_area at 0x107f11f28>
  17. print(Building.cal_area(B1))
  18. #
  19. print(B1.cal_area())
  20. #

类中提供了@property关键字,@property可以看成是一个装饰器。因此,类的实例可以直接通过点调用函数属性而不需加括号就能执行。此时,该函数属性就可称为静态属性

  1. class Building:
  2. def __init__(self, name, owner, width, length):
  3. self.name = name
  4. self.owner = owner
  5. self.width = width
  6. self.length = length
  7.  
  8. def a(self):
  9. print('a')
  10.  
  11. @property
  12. def cal_area(self):
  13. return self.length * self.width
  14.  
  15. B1 = Building('艺术楼', '艺术学院', 100, 100)
  16. print(Building.cal_area)
  17. # <function Building.cal_area at 0x107f11f28>
  18. print(B1.cal_area)
  19. #
  20. print(Building.cal_area(B1))
  21. # TypeError: 'property' object is not callable
  • 类方法

类的方法前加@classmethod,不需要实例化,直接调用类的该方法。可以访问类的数据属性,但是不可以访问对象的数据属性。

  1. class Building:
  2. tag = 'nice'
  3.  
  4. def __init__(self, name, owner, width, length):
  5. self.name = name
  6. self.owner = owner
  7. self.width = width
  8. self.length = length
  9.  
  10. @classmethod
  11. def is_beauty(cls):
  12. print(cls)
  13. print('这个房间很%s' % (cls.tag))
  14. # print(cls.name) # 不能访问实例对行的数据属性,报错: AttributeError: type object 'Building' has no attribute 'name'
  15.  
  16. B1 = Building('艺术楼', '艺术学院', 100, 100)
  17. Building.is_beauty()
  18. # <class '__main__.Building'>
  19. # 这个房间很nice
  20. B1.is_beauty()
  21. # <class '__main__.Building'>
  22. # 这个房间很nice
  • 静态方法

类的方法前加@staticmethod,该方法均可被实例和类调用,但不能访问类属性以及实例属性,仅仅当做工具包使用。

  1. class Building:
  2. tag = 'nice'
  3.  
  4. def __init__(self, name, owner, width, length):
  5. self.name = name
  6. self.owner = owner
  7. self.width = width
  8. self.length = length
  9.  
  10. @staticmethod
  11. def is_static_method(a, b, c):
  12. print(a, b, c)
  13.  
  14. B1 = Building('艺术楼', '艺术学院', 100, 100)
  15. B1.is_static_method(1, 2, 3)
  16. # 1 2 3
  17. Building.is_static_method(1, 2, 3)
  18. # 1 2 3

Python面向对象之静态方法、静态方法与类方法的更多相关文章

  1. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  2. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

  3. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  4. Python面向对象静态方法,类方法,属性方法

    Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...

  5. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  6. Python面向对象之类属性类方法静态方法

    类的结构 实例 使用面向对象开发时,第一步是设计类: 当使用 类名() 创建对象时,会自动执行以下操作: 1.为对象在内存中分配空间--创建对象: 2.为对象的属性 设置初始值--初始化方法(init ...

  7. python 面向对象 类方法,静态方法,property

    property 内置装饰器函数 只在面向对象使用 把方法当初属性使用(方法不加参数) 例子: class Rectangle: def __init__(self,long,wide,color): ...

  8. python面向对象学习(六)类属性、类方法、静态方法

    目录 1. 类的结构 1.1 术语 -- 实例 1.2 类是一个特殊的对象 2. 类属性和实例属性 2.1 概念和使用 2.2 属性的获取机制 3. 类方法和静态方法 3.1 类方法 3.2 静态方法 ...

  9. python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法

    1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过“类名()”的方式实例 ...

  10. 『无为则无心』Python面向对象 — 58、类方法和静态方法

    目录 1.实例方法 2.类方法 (1)类方法特点 (2)类方法使用场景 3.静态方法 (1)静态方法特点 (2)静态方法使用场景 1.实例方法 实例方法既可以调用静态方法也可以调用类方法. # 定义一 ...

随机推荐

  1. HDU 1238

    好吧,这题直接搜索就可以了,不过要按照长度最短的来搜,很容易想得到. 记得ACM比赛上有这道题,呃..不过,直接搜..呵呵了,真不敢想. #include <iostream> #incl ...

  2. JeeCG团队招聘啦!

    JeeCG团队招聘啦! 小团队攻坚,创业氛围浓厚.盼望有激情的你增加. 岗位描写叙述: 1,负责Jeecg.jeewx 微信管理系统相关的研发工作.2,高度參与整个产品设计.參与微信相关项目开发.3. ...

  3. php创建简单的列表页

    php创建简单的列表页 样例 代码 <?php $userInfo[] = array( 'id'=>'1', 'username'=>'fry', 'sex'=>'nan', ...

  4. 一致性hash 算法 (转)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...

  5. putty和xshell使用和免密登录

    putty和xshell使用和免密登录 XSHELL的设置 事前:我们先去关闭防火墙和selinux 关闭防火墙:   ufw disable 再去看看selinux 一.查看SELinux状态命令: ...

  6. element-ui 分页中的slot的用法(自定义分页显示内容)

    官方给的简单的例子以及效果. 最后弄成的效果: 按照文档在layout 添加slot, 这几个参数可以随意调换位置,然后分页显示效果会根据调换的位置显示相应内容.

  7. RAP、Mock.js、Vue.js、Webpack

    最近做项目使用的是RAP1的接口,但是昨天开始,RAP1 出现了问题,接口都不能用了. 所以补充一下Mock.js的用法,以便在这种突发的情况时候时自己通过Mock的方式来处理接口. npm init ...

  8. 关于VS 2013连接Microsoft Access 2013的相关问题

      ①   下载安装Microsoft Access Database Engine 2010 Redistributable(28MB),共有32bit(下载)和64bit(下载)两个版本,具体要安 ...

  9. Thread pool引起的程序连接数据库响应慢

    数据库版本:percona-mysql 5.6.16 ​在很长一段时间,都会出现程序连接数据库,出现响应慢的情况,正常在几到几十毫秒之间,但是偶尔会出现上百毫秒的情况: 开始由于开发重新设置并调整过程 ...

  10. vue2 阻止时间冒泡

    click.stop.prevent <div class="content-right" @click.stop.prevent="pay" > ...