python中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)
该部分的三个属性都是高级方法,平时用的地方不是很多
一、静态方法
静态方法的使用不是很多,可以理解的就看一下,用的地方不是很多
class Dog(object):
def __init__(self,name):
self.name = name
# 静态方法:平时用的不是很多,可以通过联想中国和台湾的关系来记忆
# 只是名义上归类管理,实际上在静态方法中访问不了类或实例中的任何属性
@staticmethod # 变成静态方法之后该方法就和类没什么关系了,就只是相当于一个单纯的函数,
def eat(self): # 并且没法使用类里面的变量了,但是可以使用自己的变量
# def eat(self, food):
# print("%s is eating %s..."%(self.name,food))
print("%s is eating %s..." % ("ddd", "sss"))
d = Dog("zhangsan")
d.eat("baozi")

二、类方法
和静态方法一样,用的地方不是很多
class Dog(object):
n = "ddd" # 类变量
def __init__(self,name):
self.name = name
# 类方法:无论实例变量怎么改,都是依据类变量来变化和静态方法一样 基本用不到
@classmethod # 类方法只能访问类变量,不能访问实例变量
def eat(self,food): # 实例变量
print("%s is eating %s..."%(self.n,food))
d = Dog("zhangsan") # 因为类方法只能访问类变量,所以无论该参数是什么,结果都是'ddd'
d.eat("baozi")
三、属性方法
属性方法的使用有实例,但是用的地方也不是很多
class Dog(object):
def __init__(self,name):
self.name = name
self.__food = None
# 属性方法: 把一个方法变成一个静态属性,就不能再调用了
# 隐藏了方法,对用户来说就是提供了一个API,实现就一步
@property
def eat(self): # 实例变量
print("%s is eating %s..."%(self.name,self.__food))
@eat.setter # 如果想使属性变量可以传参数(修改属性),可以这么设置
def eat(self,food):
print("set to food:",food)
self.__food = food
@eat.deleter # 可以通过此方法删掉属性
def eat(self):
del self.__food
print("删完了")
d = Dog("zhansgan")
# d.eat() # 这是不行的,因为静态方法变成属性之后就不能在调用了
d.eat # 只能以方法的形式来调用,就不能传参数了
del d.eat # 如果不通过@eat.deleter,这个操作是没用的
d.eat # 报错之后说明属性通过@eat.deleter得到了删除
属性方法的使用可以结合下面的实例来理解:
class Flight(object):
def __init__(self,name):
self.flight_name = name
def checking_status(self):
print("checking flight %s status " % self.flight_name)
return 0
@property
def flight_status(self):
status = self.checking_status()
if status == 0 :
print("flight got canceled...")
elif status == 1 :
print("flight is arrived...")
elif status == 2:
print("flight has departured already...")
else:
print("cannot confirm the flight status...,please check later")
@flight_status.setter
def flight_status(self,status):
print("flight %s has changed status to %s" %(self.flight_name,status))
f = Flight("CA980")
f.flight_status
f.flight_status = 2

福利:
1.在网上浏览到的关于几种方法更好的解释详情请见:https://www.cnblogs.com/wcwnina/p/8644892.html
2.不能获得的,这个和变量的生命周期有关,一个方法中的一个变量的生命周期是从它在这个方法中声明开始,到这个方法调用完毕时结束。
因此你在类A中的方法a中无法调用类B中的方法b中的变量var_b,因为这个变量在这个时间还没有被创建。
python中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)的更多相关文章
- python中打印金字塔和九九乘法表的几种方法
# 打印九九乘法表for i in range(1,10): for j in range(1,i+1): # x=i*j # print(i,'*',j,'=',x,end=' ') print(' ...
- Python中如何获取类属性的列表
这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧. 前言 最近工作 ...
- VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法
原文:VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/ar ...
- Win7系统与它的Virtualbox中安装的Ubuntu14.04共享信息的几种方法
虚拟机是每一个程序猿必备的工具.本文依据最新版VirtualBox用户手冊的提示,通过自己的亲自实践,给出了Win7系统与执行在当中的VirtualBox 5.0.2中的Ubuntu 14.04共享信 ...
- 【转】Linux 中清空或删除大文件内容的五种方法(truncate 命令清空文件)
原文: http://www.jb51.net/article/100462.htm truncate -s 0 access.log -------------------------------- ...
- 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)
从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...
- python静态方法类方法属性方法
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问 ...
- python中的静态方法和类方法
在python中,各种方法的定义如下所示: class MyClass(object): #在类中定义普通方法,在定义普通方法的时候,必须添加self def foo(self,x): print & ...
- 在python中使用静态方法staticmethod
静态方法: 静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作.可以理解为将静态方法存在 ...
随机推荐
- 微信小程序细节
微信小程序开发几个细节: 1.界面传值 ①全局参数传值 <!--结果--> <view wx:for="{{data}}" class="case pr ...
- es数据迁移脚本(python)
#!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:indiceCreate.py import sys import base64 import time ...
- C语言三个结束符:EOF ‘\0’ '\n'
- Static变量与代码块
* static:是一个关键字,用于修饰成员变量和成员方法 * static的特点: * 被所有的对象所共享 * 可以使用类名调用 * 静态的加载优先于对象 * 随着类的加载而加载 * static的 ...
- poj 1456 Supermarket - 并查集 - 贪心
题目传送门 传送点I 传送点II 题目大意 有$n$个商品可以销售.每个商品销售会获得一个利润,但也有一个时间限制.每个商品需要1天的时间销售,一天也只能销售一件商品.问最大获利. 考虑将出售每个物品 ...
- Java排序算法之选择排序
一.算法原理 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n-1]中选出最小的数据,将它与arrr[0]交换:第2趟,在待排序 ...
- ZOJ 3962 Seven Segment Display(数位DP)题解
题意:给一个16进制8位数,给定每个数字的贡献,问你贡献和. 思路:数位DP,想了很久用什么表示状态,看题解说用和就行,其他的都算是比较正常的数位DP. 代码: #include<iostrea ...
- 【问题解决】连接mysql 8错误:authentication plugin 'caching_sha2_password
在刚安装好mysql8,使用native连接的时候报错 authentication plugin 'caching_sha2_password'... 首先确保服务已开启,然后通过cmd命令进入my ...
- html页面使用前端框架布局时,弹出子页面等情况若出现布局混乱,可能是回发导致
解决方法:需要带调用 弹框 那里 写一段return false防止回发
- LOJ 6485 LJJ学多项式
前言 蒟蒻代码惨遭卡常,根本跑不过 前置芝士--单位根反演 单位根有这样的性质: \[ \frac{1}{n}\sum_{i=0}^{n-1}\omega_{n}^{ki}=\left[n|k\rig ...