Python类(六)-静态方法、类方法、属性方法
静态方法
通过@staticmethod来定义,静态方法在类中,但在静态方法里访问不了类和实例中的属性,但静态方法需要类来调用
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
def __init__(self,name):
self.name = name @staticmethod
def eat(self,food):
print("%s is eating %s"%(self.name,food)) if __name__ == '__main__':
p = Person('John')
p.eat('meat')
运行,报错

把eat方法的参数去掉,直接打印,可以直接调用
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
def __init__(self,name):
self.name = name @staticmethod
def eat():
print("John is eating") if __name__ == '__main__':
p = Person('John')
p.eat()
运行结果

如果要给eat()传参数的话,可以把实例化的Person传入
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
def __init__(self,name):
self.name = name @staticmethod
def eat(self):
print("%s is eating"%self.name) if __name__ == '__main__':
p = Person('John')
p.eat(p)
运行结果

类方法
类方法通过@classmethod来定义
类方法只能访问类变量,不能访问实例变量
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
name = 'Jack'
def __init__(self,name):
self.name = name @classmethod
def eat(self):
print("%s is eating"%self.name) if __name__ == '__main__':
p = Person('John')
p.eat()
运行结果

传入了实例变量John,但打印的却是Jack
因为类方法不能访问实例变量,所以类方法访问了类里的类变量
属性方法
通过@property来定义属性方法
把类中的方法变为静态属性
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
def __init__(self,name):
self.name = name @property
def eat(self):
print("%s is eating"%self.name) if __name__ == '__main__':
p = Person('John')
p.eat
按照调用属性的方法来调用属性方法

如果想给属性方法传参数的话,要使用setter
格式:@属性方法名.setter
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
def __init__(self,name):
self.name = name
self.__food = None #设置一个私有属性 @property
def eat(self):
print("%s is eating %s"%(self.name,self.__food)) #名称要与属性方法的一样
@eat.setter
def eat(self,food):
print("Set the food:%s"%food)
self.__food = food if __name__ == '__main__':
p = Person('John')
p.eat
p.eat = 'meat' #通过赋值的方法来传参数,并调用用来传参数的eat方法
p.eat
运行结果

最先是None,经过赋值传参数后为meat
要删除属性方法的属性,可以使用deleter
格式:@属性方法名.deleter
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" class Person(object):
def __init__(self,name):
self.name = name
self.__food = None #设置一个私有属性 @property
def eat(self):
print("%s is eating %s"%(self.name,self.__food)) #名称要与属性方法的一样
@eat.setter
def eat(self,food):
print("Set the food:%s"%food)
self.__food = food @eat.deleter
def eat(self):
del self.__food
print('Del the food ok!') if __name__ == '__main__':
p = Person('John')
p.eat
p.eat = 'meat' #通过赋值的方法来传参数,并调用用来传参数的eat方法
p.eat
del p.eat #调用@eat.deleter来删除属性方法eat的food属性
p.eat
运行结果

前四条语句成功执行,删除food属性后,第五条语句没有food属性,报错
Python类(六)-静态方法、类方法、属性方法的更多相关文章
- python静态方法类方法属性方法
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问 ...
- Python类总结-封装(私有属性,方法)
封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...
- python类可以任意添加属性
python类可以任意添加属性 class A(object): def __init__(self): self.name = "zhangsan" self.age = 18 ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘
孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...
- python类的静态方法和类方法区别
先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法. # coding:utf-8 class Foo(object): """类三种方法语法形式&q ...
- python面向对象(七)属性方法的添加
通常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.下来我就讲下添加属性和方法,同时也将下限值添加属性方法. 添加属性 ...
- 第8.18节 Python类中内置析构方法__del__
一. 引言 基本上所有支持OOP设计的语言都支持析构方法(也称析构函数),析构方法都是在对象生命周期结束时调用,一般用来实施实例相关生命周期内访问数据的扫尾工作,包括关闭文件.释放内存.输出日志.清理 ...
- python - 类的内置 attr 方法
类的内置 attr 方法 #类的内置 attr 方法: # __getattr__ # __setattr__ # __delattr__ # __getattr__ #到调用一个类不存在数参数时,将 ...
随机推荐
- thinkphp判断更新是否成功
如何判断一个更新操作是否成功 $Model = D('Blog'); $data['id'] = 10; $data['name'] = 'update name'; $result = $Model ...
- spark学习2(hive0.13安装)
第一步:hive安装 通过WinSCP将apache-hive-0.13.1-bin.tar.gz上传到/usr/hive/目录下 [root@spark1 hive]# chmod u+x apac ...
- ajax01简介
(Asynchronous JavaScript and XML)Ajax :异步 JavaScript 和 XML,一种允许浏览器和服务器通信进行少量数据交换而无需重新加载整个网页,以实现更新部分网 ...
- django学习笔记整理(1)django的MTV模式
django作为一个python的网络编程的框架,自然有着其规律可循.通过对django的了解,也明白了一些网络编程的知识.最近这近一个月,在网上查了许多文字资料,也看了别人的视频之类的资料,也算是对 ...
- SoapUI使用方法-01发送http请求
soap ui http://blog.csdn.net/russ44/article/details/51680083 一.发送HTTP请求消息 1.打开soapUI. 2.新建一个项目,实例如下: ...
- 更改自己iCloud的地区
百度一大堆都是过时的,而且没有用,通过google后发现google+里有一个文章https://plus.google.com/+%E5%90%B4%E5%BF%97%E5%8B%8776/post ...
- openstack live migration性能分析
http://blog.zhaw.ch/icclab/an-analysis-of-the-performance-of-live-migration-in-openstack/ http://blo ...
- Ceph pg分裂流程及可行性分析
转自:https://www.ustack.com/blog/ceph-pg-fenlie/ 1 pg分裂 Ceph作为一个scalable的分布式系统,集群规模会逐渐增大,为了保证数据分布的均匀性, ...
- HANA 存储过程
You can develop secure procedures using SQLScript in SAP HANA by observing the following recommendat ...
- 2018.7.26 学会说NO,拒绝道德绑架。
一.领导交给你一项不属于你工作范围的工作,是否需要拒绝,你可以考虑以下问题: 1.这是与我核心能力相关的工作吗?是,接受:否,进入下一条: 2.它能帮助我拓展我核心能力的边界,或是我感兴趣的吗?是,接 ...