property 、classmethod 、 staticmethod 的用法
@property
# property是一个装饰器函数 ,作用:将一个方法伪装成属性
# 所有的装饰器函数都怎么用? 在函数、方法、类的上面一行直接@装饰器的名字
# 装饰器的分类:
# 装饰函数
# 装饰方法 : property
# 装饰类
class Student:
def __init__(self,name,age):
self.__name = name
self.age = age
@property # 将一个方法伪装成一个属性
def name(self):
return self.__name
zhuge = Student('诸葛',20)
print(zhuge.name)
计算一个圆的面积和周长
from math import pi
class Circle:
def __init__(self,r):
self.r = r
@property
def area(self):
return self.r**2*pi
@property
def perimeter(self):
return 2*self.r *pi
c1 = Circle(10)
print(c1.area)
print(c1.perimeter)
Goods的实例
class Goods:
__discount = 0.8
def __init__(self,price):
self.__price = price
@property
def price(self):
return self.__price*Goods.__discount
@price.setter
def price(self,new):
self.__price = new
@price.deleter
def price(self):
del self.__price # 真的删除,可以赋值
apple = Goods(10)
print(apple.price) apple.price = 8
print(apple.price)
# 只有当被property装饰的方法
# 又实现了一个同名方法
# 且被setter装饰器装饰了
# 且在对被装饰的方法赋值的时候 就可以出发被setter装饰器方法
# 作用:用来保护一个变量,在修改的时候能够添加一些保护条件
# 一个方法被伪装成属性之后
# 应该执行一个属性的增删改查的操作
# 那么增删和修改,就对应着被setter装饰的方法,这个方法又一个必传的参数new,表示赋值的时候等号后的值
# 删除一个属性 对应着 被deleter装饰的方法,这个方法并不能在执行的时候真的被删除,而是在代码中执行什么就有什么效果。
@classmethod 类方法
class Goods:
__discount = 0.8
def __init__(self,price):
self.__price = price
@property
def price(self):
return self.__price*Goods.__discount
@classmethod
def chang_discount(cls,new): # 类方法
cls.__discount = new
apple = Goods(10)
banana = Goods(20)
Goods.chang_discount(0.7) # 改变了类中私有属性
# print(Goods.__dict__) print(apple.price)
print(banana.price)
特点:只使用类中的资源,且这个资源可以直接用类名引用的使用,那这个方法应该被改为一个方法
# @staticmethod 将类外面的函数 拿到里面
class Student: # 静态方法
@staticmethod # 可以把外面的函数拿到类里面写
def login(usr,pwd): # 相当于将他变成普通方法,可以不用self传参。通过类名点方法名调用
print('in login',usr,pwd)
Student.login('user','pwd')
property 、classmethod 、 staticmethod 的用法的更多相关文章
- 初识面向对象(钻石继承,super,多态,封装,method,property,classmethod,staticmethod)
组合 什么有什么的关系 一个类的对象作为另一个类的对象继承 子类可以使用父类中的名字(静态属性 方法)抽象类和接口类 只能不继承,不能被实例化 子类必须实现父类中的同名方法———规范代码 metacl ...
- python 全栈开发,Day22(封装,property,classmethod,staticmethod)
一.封装 封装 : 广义上的 :把一堆东西装在一个容器里 狭义上的 :会对一种现象起一个专门属于它的名字 函数和属性装到了一个非全局的命名空间 —— 封装 隐藏对象的属性和实现细节,仅对外提供公共访问 ...
- Python学习第十六课——静态属性(property, classmethod, staticmethod)
计算所居住房子的面积 普通写法 class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.ow ...
- 面向对象 公有私有 property classmethod staticmethod
接口类(抽象类)--------就是一种规范 面向对象的私有与公有 对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的访问限制不 ...
- @property@classmethod@staticmethod
一.静态属性@property将方法标记成数据属性:可以访问实例和类的属性 @classmethod标记成类的方法,不需要实例化,可以类直接调用的方法.可以访问类的属性方法,不能访问实例的 class ...
- python面试题之下面这些是什么意思:@classmethod, @staticmethod, @property?
回答背景知识 这些都是装饰器(decorator).装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类. @标记是语法糖(syntactic s ...
- Python类中装饰器classmethod,staticmethod,property,
@classmethod 有的时候在类中会有一种情况,就是这个方法并不需要使用每一个对象属性 因此 这个方法中的self参数一个完全无用的参数,使用classmethod class A: __cou ...
- @classmethod @staticmethod 个人理解
官方解释 @classmethod 一个类方法把类自己作为第一个实参, 就像一个实例方法把实例自己作为第一个实参. 语法格式: class C: @classmethod def f(cls, arg ...
- @classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数。下面的例子展示了它们的用法和行为:
class MyClass(object): def __init__(self): self._some_property = "properties are nice" sel ...
随机推荐
- pytho 单例模式
单例模式存在的目的是保证当前内存中仅存在单个实例,避免内存浪费!!! (程序如果并发量大的话,内存里就会存在非常多功能上一模一样的对象.存在这些对象肯定会消耗内存,对于这些功能相同的对象可以在内存中仅 ...
- 2013年第四届蓝桥杯JavaB组省赛试题解析
题目及解析如下: 题目大致介绍: 第一题到第四题是结果填空,方法不限只要得到最后结果就行 第五题和第六题是代码填空题,主要考察算法基本功和编程基本功 第七题到第十题是编程题,要求编程解决问题 第一题 ...
- c#上传文件并将word pdf转化成txt存储并将内容写入数据库
c#上传文件并将word pdf转化成txt存储并将内容写入数据库 using System; using System.Data; using System.Configuration; using ...
- ubuntu14.04 配置g++工具,并运行一个简单的c++文件
首先,对Ubuntu 14.04 LTS进行源更新,摘自下述链接: http://chenrongya.blog.163.com/blog/static/8747419620143185103297/ ...
- 关于xampp默认安装后mysql/mariadb密码的修改
关于xampp默认按照后mysql/mariadb密码的修改 默认安装的mysql/mariadb 是没有密码的 只能跳过 然后进行修改密码 /opt/lampp/bin/mysqld_safe - ...
- 45.更新一下scrapy爬取工商信息爬虫代码
这里是完整的工商信息采集代码,不过此程序需要配合代理ip软件使用.问题:1.网站对ip之前没做限制,但是采集了一段时间就被检测到设置了反爬,每个ip只能访问十多次左右就被限制访问.2.网站对请求头的检 ...
- scrapy之downloader执行流程
Agent = client.Agent class ScrapyAgent(object): _Agent = Agent#为twisted的client.Agent类 _ProxyAgent = ...
- Jquery的一些基本操作
/*获得TEXT.AREATEXT的值*/ var textval = $("#text_id").attr("value"); //或者 var textva ...
- idea 添加代码自动提示支持,已PHP扩展 swoole 为例
1,下载代码支持包 => swoole-ide-helper-en => https://github.com/eaglewu/swoole-ide-helper.git 2,如果安装了 ...
- TypeError: 'range' object doesn't support item deletion
python 是个逐步迭代开发的过程,他不是向下兼容的,更不是向上兼容,版本不一致,好端端的程序就是不能运行了. 下面是在python 2中能运行,在Python 3中不能运行的代码.其实也很简单.但 ...