Python面向对象之静态属性、类方法与静态方法分析
作者:我是马克思小清新 发布时间:2021-03-28 15:14:22
标签:Python,面向对象,静态属性,类方法,静态方法
本文实例讲述了Python面向对象之静态属性、类方法与静态方法。分享给大家供大家参考,具体如下:
1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样。这个函数是可以调用对象和类的属性的。
# -*- coding:utf-8 -*-
class Room:
def __init__(self,name,owner,width,length):
self.name = name
self.owner = owner
self.width = width
self.length = length
@property
def cal_area(self):
return self.length * self.width
r1 = Room('卧室','alex',100,1000)
print(r1.cal_area)
#r1.cal_area = 10 并不是真实的数据属性,所以不可以在外部直接赋值。
运行结果:
100000
2. 类方法:在类的方法前添加@classmethod,不需要实例化,直接调用类的该方法。可以访问类的数据属性,但是不可以访问对象的数据属性。
# -*- coding:utf-8 -*-
class Room:
style = '别墅'
def __init__(self,name,owner,width,length):
self.name = name
self.owner = owner
self.width = width
self.length = length
@property
def cal_area(self):
return self.length * self.width
@classmethod
def tell_style(cls):
#这么写会报错,因为name是对象的数据属性,而类方法是不可以访问实例的属性的
#print('%s的房间风格是%s'%(cls.name,cls.style))
print('房间的风格是%s'%(cls.style))
#类方法的定义只是为了类去调用
Room.tell_style()
运行结果:
房间的风格是别墅
3. 静态方法:在类的方法前加@staticmethod,该方法只是名义上的归属类管理,实例和类的属性均不可以访问,仅仅是类的工具包。
# -*- coding:utf-8 -*-
class Room:
style = '别墅'
def __init__(self,name,owner,width,length):
self.name = name
self.owner = owner
self.width = width
self.length = length
@property
def cal_area(self):
return self.length * self.width
@classmethod
def tell_style(cls):
#这么写会报错,因为name是对象的数据属性,而类方法是不可以访问实例的属性的
#print('%s的房间风格是%s'%(cls.name,cls.style))
print('房间的风格是%s'%(cls.style))
@staticmethod
def shower():
print("洗澡")
def test(self):
print("这不是静态方法,而且自动生成参数,必须要有实例")
Room.shower()
r1 = Room('别墅','alex',10,10)
r1.shower() #这么调用也没有问题
#报错,因为不是静态方法,必须要实例化
Room.test()
运行结果:
洗澡
洗澡
Traceback (most recent call last):
File "C:\py\jb51PyDemo\src\Demo\test.py", line 26, in <module>
Room.test()
TypeError: unbound method test() must be called with Room instance as first argument (got nothing instead)
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/qq_33531400/article/details/79879165
猜你喜欢
- 知识点简单的装饰器带有参数的装饰器带有自定义参数的装饰器类装饰器装饰器嵌套@functools.wrap装饰器使用基础使用简单的装饰器def
- SQL Server有两种备份方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志
- 如果你计划将数据库从SQL Server 2000 升级到 SQL Server 2005。你在升级之前一定会测试每样东西,并且证明应用程序
- 导入注意点:使用phpmyadmin或navicat之类的工具的导入功能还是会相当慢,可以直接使用mysql进行导入导入命令如下:mysql
- 请求动态参数(例如时间戳)有时我们在请求接口时,需要带上当前时间戳这种动态参数,那么postman能不能自动的填充上呢。我们可以使用post
- Python SSH远程连接与文件传输from paramiko import (SSHClient, SFTPClient, AutoAd
- 游戏玩法根据神庙逃亡,实现一个人躲避僵尸的小游戏,主要的是精灵、精灵组之间相撞、相交的处理。游戏开始随机出现一定的僵尸,随机移动,玩家在一位
- 1. 需求:用户答题练习,当用户获取所有题目的同时,需要判断用户是否已经做过该题目,如果做过,需要render的时候添加一个“回顾”按钮。2
- 1. defer的简单介绍与使用场景defer是Go里面的一个关键字,用在方法或函数前面,作为方法或函数的延迟调用。它主要用于以下两个场景:
- 本文实例讲述了Python计算一个给定时间点前一个月和后一个月第一天的方法。分享给大家供大家参考,具体如下:python如何获取一个时间点的
- 如何让页面超时并指定一个超时时间?下面就是利用缓冲的程序页面事例: <%@ OutputCache Du
- 前言GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护
- 概述何为路由守卫?路由守卫有点类似于ajax的请求 * ,就是请求发送之前先给你拦截住做一些事情之后再去发送请求,同样这里的路由守卫意思差不
- 本文实例为大家分享了python实现随机漫步的具体代码,供大家参考,具体内容如下编写randomwalk类from random impor
- 目录一、 文件的操作1.1创建文件1.2写入数据1.3读数据1.4 2读数据1.5读写数据1.6删除文件1.7写入文件1.8读取图片1.9备
- AES加密AES对称加密简介AES是一个对称密码,旨在取代DES成为广泛使用的标准。是美国联邦政府采用的一种区块加密标准。AES对称加密过程
- 代码如下:td=date() '此次为设置当前日期,主要是为了调试方便,实际应用中可以使用当天日期.. str=
- 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2
- 代码简单,直接看代码吧:import socketimport threadingimport re#import Tkinterdef s
- 方法 bindParam() 和 bindValue() 非常相似。 唯一的区别就是前者使用一个PHP变量绑定参数,而后者使用一个值。 所以





