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

一、静态方法

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


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. protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 2, class-id=60, method-id=80)

    Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.c ...

  2. vue 起步

    vue 官网 目前最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”.授予了这么高的评价的vue ...

  3. Java 中断异常的正确处理方式

    处理InterruptedException 这个故事可能很熟悉:你正在写一个测试程序,你需要暂停某个线程一段时间,所以你调用 Thread.sleep().然后编译器或 IDE 就会抱怨说 Inte ...

  4. 获取RadioButton选中的值

    1.RadioButtonList的RepeatDirection="Horizontal"可以设置按扭选项横对齐: 2.获取选中的RadioButton值; $("#& ...

  5. VS2012创建ATL工程及使用MFC测试COM组件

    一.创建ATL工程 1.创建ATL项目,取名为ATLMyCom 2.在ATL项目向导中,勾选[支持MFC](利用MFC测试用).[支持 COM+ 1.0],其余的选项默认,点击完成. 3.右键工程名称 ...

  6. 【python36--对象】

    1.对象=属性+方法 2.实例化对象 #类名称首字母大写 class Turle: #属性 color = 'green' weight = 10 legs = 4 shell = True mout ...

  7. You have new mail in /var/spool/mail/root

    centos7.5 查看邮件的方式: [root@web01 code]# yum -y install mailx #安装mailx [root@web01 code]# mail #执行mail命 ...

  8. python使用pip下载模块

    举例下载串口模块pyserial: 下载安装了python之后,打开cmd,在python的安装目录里,搜索pip,把pip3.7.exe拖进cmd,然后输入pip3.7.exe install py ...

  9. fastjson常用方法

    fastjson是一款alibaba公司开发的json工具包.json经常被使用在数据传输方面,因此特意对它的一些常用方法做备注,欢迎看客在评论区补充或指出问题. 首先定义一个实体类,用于我们进行对象 ...

  10. RPMB原理介绍【转】

    本文转载自:https://blog.csdn.net/shenjin_s/article/details/79868375 RPMB介绍:RPMB(Replay Protected Memory B ...