该部分的三个属性都是高级方法,平时用的地方不是很多

一、静态方法

静态方法的使用不是很多,可以理解的就看一下,用的地方不是很多


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中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)的更多相关文章

  1. python中打印金字塔和九九乘法表的几种方法

    # 打印九九乘法表for i in range(1,10): for j in range(1,i+1): # x=i*j # print(i,'*',j,'=',x,end=' ') print(' ...

  2. Python中如何获取类属性的列表

    这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧. 前言 最近工作 ...

  3. VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法

    原文:VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/ar ...

  4. Win7系统与它的Virtualbox中安装的Ubuntu14.04共享信息的几种方法

    虚拟机是每一个程序猿必备的工具.本文依据最新版VirtualBox用户手冊的提示,通过自己的亲自实践,给出了Win7系统与执行在当中的VirtualBox 5.0.2中的Ubuntu 14.04共享信 ...

  5. 【转】Linux 中清空或删除大文件内容的五种方法(truncate 命令清空文件)

    原文: http://www.jb51.net/article/100462.htm truncate -s 0 access.log -------------------------------- ...

  6. 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)

    从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...

  7. python静态方法类方法属性方法

    Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问 ...

  8. python中的静态方法和类方法

    在python中,各种方法的定义如下所示: class MyClass(object): #在类中定义普通方法,在定义普通方法的时候,必须添加self def foo(self,x): print & ...

  9. 在python中使用静态方法staticmethod

    静态方法: 静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作.可以理解为将静态方法存在 ...

随机推荐

  1. rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计

    非集群下,简单的说:- 如果是excl,则设置durability没有意义,因为不管服务器挂了还是客户端主动/被动断开了,队列都会自动删除.- auto-delete,其实可简单的认为是同理,即使非e ...

  2. Springboot项目修改html后不需要重启---springboot项目的热部署

    一.spring-boot-devtools 在pom中直接引入依赖 <dependency> <groupId>org.springframework.boot</gr ...

  3. Linux 系统下安装 python-skimage

    Linux 系统下安装 python-skimage 安装必须的依赖 // python-mumpy // python-scipy // python-matplotlib $ sudo apt-g ...

  4. 01:tcp/ip基本知识

    1.1 tcp常识 1.网络七层 2.TCP三层握手 ####1.第一次握手 # 建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认 ...

  5. 一条命令,根据进程名判断有进程输出up,无进程无输出

    这个研究了好一会, 由于开发需要,提供的命令. shell命令,可以按照分号分割,也可以按照换行符分割.如果想一行写入多个命令,可以通过“';”分割. a=`ps -ef | grep nginx | ...

  6. mysql 水平分表技术

    这里做的是我的一个笔记. 水平分表比较简单, 理解就是: 合并的表使用的必须是MyISAM引擎 表的结构必须一致,包括索引.字段类型.引擎和字符集 数据表 user1 CREATE TABLE `us ...

  7. 16 级高代 II 思考题十的多种证明

    16 级高代 II 思考题十  设 $V$ 是数域 $\mathbb{K}$ 上的 $n$ 维线性空间, $\varphi$ 是 $V$ 上的线性变换, 证明: $\varphi$ 的极小多项式 $m ...

  8. Restful framework【第十一篇】url路由控制

    基本使用 -url控制 -传统的url配置 url(r'^books/$', views.BookView.as_view()), url(r'^books/(?P<pk>\d+)$', ...

  9. Spring Security原理与应用

    Spring Security是什么 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置 ...

  10. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...