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__ #到调用一个类不存在数参数时,将 ...
随机推荐
- 使用 grep 查找所有包含指定文本的文件
目标:本文提供一些关于如何搜索出指定目录或整个文件系统中那些包含指定单词或字符串的文件. 难度:容易 约定: # - 需要使用 root 权限来执行指定命令,可以直接使用 root 用户来执行也可以使 ...
- R语言学习笔记(4)
第四章:基本数据管理 一 贯穿整章的示例 二 变量的创建.重编码和重命名 三 日期值与缺失值 四 数据类型和类型转换 五 数据集的排序.合并与取子集 一 贯穿整章的示例(leadership) ,, ...
- mapreduce实现学生平均成绩
思路: 首先从文本读入一行数据,按空格对字符串进行切割,切割后包含学生姓名和某一科的成绩,map输出key->学生姓名 value->某一个成绩 然后在reduce里面对成绩进行遍历 ...
- mysqldump 用法汇总
mysql mysqldump 只导出表结构 不导出数据 复制代码代码如下: mysqldump --opt -d 数据库名 -u root -p > xxx.sql 备份数据库 复制代码代 ...
- Qt中使用setStyleSheet对QPushButton按钮进行外观设置
Qt中使用setStyleSheet对按钮进行外观设置 字体颜色的设置一般时以下两种方案: (1)属于QWidget子类的一些控件 可以直接使用样式表,例如label->setStyleShee ...
- Python之面向对象总结
一.面向对象 1.面向过程 a.优点:极大的降低了写程序的复杂度,只需要顺着执行的步骤,堆叠代码即可 b.缺点:一套流水线或者流程就是来解决一个问题,代码就是牵一发而东莞全身 2.面向对象 a.优点: ...
- localstorage存储对象
之前在客户端存储数据一直用的是cookie,由于有大小等限制,随着html5时代的到来,现在大多数用的是localstorage存储数据: 例如: localStorage.setItem(" ...
- java:Writer/Reader字符流操作
字符流的操作: 字节流的操作,是直接映射文件的:file->文件 字符流的操作是需要存在缓存区的:file->缓冲区->文件 (中文处理,一般用字符流) public static ...
- Pycharm如何打断点
一. python代码的调试方式 1. 使用print语句打印出来 2. 在编辑工具中,加断点跟踪(打断点) 3. 使用日志模块,输出到日志中 下面我们来看一下如何打断点 二. 环境 python 3 ...
- oracle for loop 简单
declare i NUMBER; begin loop INSERT INTO emp VALUES(i,i); end LOOP; END;