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
		静态方法: 静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作.可以理解为将静态方法存在 ... 
随机推荐
- rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计
			非集群下,简单的说:- 如果是excl,则设置durability没有意义,因为不管服务器挂了还是客户端主动/被动断开了,队列都会自动删除.- auto-delete,其实可简单的认为是同理,即使非e ... 
- Springboot项目修改html后不需要重启---springboot项目的热部署
			一.spring-boot-devtools 在pom中直接引入依赖 <dependency> <groupId>org.springframework.boot</gr ... 
- Linux 系统下安装 python-skimage
			Linux 系统下安装 python-skimage 安装必须的依赖 // python-mumpy // python-scipy // python-matplotlib $ sudo apt-g ... 
- 01:tcp/ip基本知识
			1.1 tcp常识 1.网络七层 2.TCP三层握手 ####1.第一次握手 # 建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认 ... 
- 一条命令,根据进程名判断有进程输出up,无进程无输出
			这个研究了好一会, 由于开发需要,提供的命令. shell命令,可以按照分号分割,也可以按照换行符分割.如果想一行写入多个命令,可以通过“';”分割. a=`ps -ef | grep nginx | ... 
- mysql 水平分表技术
			这里做的是我的一个笔记. 水平分表比较简单, 理解就是: 合并的表使用的必须是MyISAM引擎 表的结构必须一致,包括索引.字段类型.引擎和字符集 数据表 user1 CREATE TABLE `us ... 
- 16 级高代 II 思考题十的多种证明
			16 级高代 II 思考题十 设 $V$ 是数域 $\mathbb{K}$ 上的 $n$ 维线性空间, $\varphi$ 是 $V$ 上的线性变换, 证明: $\varphi$ 的极小多项式 $m ... 
- Restful framework【第十一篇】url路由控制
			基本使用 -url控制 -传统的url配置 url(r'^books/$', views.BookView.as_view()), url(r'^books/(?P<pk>\d+)$', ... 
- Spring Security原理与应用
			Spring Security是什么 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置 ... 
- 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)
			一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25 16:29:19 对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ... 
