@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 的用法的更多相关文章

  1. 初识面向对象(钻石继承,super,多态,封装,method,property,classmethod,staticmethod)

    组合 什么有什么的关系 一个类的对象作为另一个类的对象继承 子类可以使用父类中的名字(静态属性 方法)抽象类和接口类 只能不继承,不能被实例化 子类必须实现父类中的同名方法———规范代码 metacl ...

  2. python 全栈开发,Day22(封装,property,classmethod,staticmethod)

    一.封装 封装 : 广义上的 :把一堆东西装在一个容器里 狭义上的 :会对一种现象起一个专门属于它的名字 函数和属性装到了一个非全局的命名空间 —— 封装 隐藏对象的属性和实现细节,仅对外提供公共访问 ...

  3. Python学习第十六课——静态属性(property, classmethod, staticmethod)

    计算所居住房子的面积 普通写法 class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.ow ...

  4. 面向对象 公有私有 property classmethod staticmethod

    接口类(抽象类)--------就是一种规范 面向对象的私有与公有 对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的访问限制不 ...

  5. @property@classmethod@staticmethod

    一.静态属性@property将方法标记成数据属性:可以访问实例和类的属性 @classmethod标记成类的方法,不需要实例化,可以类直接调用的方法.可以访问类的属性方法,不能访问实例的 class ...

  6. python面试题之下面这些是什么意思:@classmethod, @staticmethod, @property?

    回答背景知识 这些都是装饰器(decorator).装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类. @标记是语法糖(syntactic s ...

  7. Python类中装饰器classmethod,staticmethod,property,

    @classmethod 有的时候在类中会有一种情况,就是这个方法并不需要使用每一个对象属性 因此 这个方法中的self参数一个完全无用的参数,使用classmethod class A: __cou ...

  8. @classmethod @staticmethod 个人理解

    官方解释 @classmethod 一个类方法把类自己作为第一个实参, 就像一个实例方法把实例自己作为第一个实参. 语法格式: class C: @classmethod def f(cls, arg ...

  9. @classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数。下面的例子展示了它们的用法和行为:

    class MyClass(object): def __init__(self): self._some_property = "properties are nice" sel ...

随机推荐

  1. CS229 6.17 Neurons Networks convolutional neural network(cnn)

    之前所讲的图像处理都是小 patchs ,比如28*28或者36*36之类,考虑如下情形,对于一副1000*1000的图像,即106,当隐层也有106节点时,那么W(1)的数量将达到1012级别,为了 ...

  2. python r(不进行转义)的用法

      第一种用法,直接针对字符串:r‘E:\ui\bbq.txt’ 第二种用法,针对变量名:r'' + 变量名

  3. .NET发送邮箱(验证码)

    先看下前端: 写代码前先设置: 一:登录QQ邮箱,点击设置 二: 三: //下面开始敲代码... //两个命名空间 //using System.Net; //using System.Net.Mai ...

  4. android开发 静态碎片布局实现

    实现思维: 1.需要写2个或者多个子布局 2.写一个Java的class去实现将子布局与父类布局铺满.(一个子布局对应一个class) 3.在父类布局中导入fragment布局,并且添加android ...

  5. JSP 静态文件路径配置

    在JSP中,往往需要引入一些静态文件. 例如这样引用. 往往因为目录结构的问题,不知道是用点还是 .../ ./ ../表示相对当前路径的上一级目录:./表示相对当前的路径: 这里有个快捷的办法. l ...

  6. 干净win7要做几步才能运行第一个Spring MVC 写的动态web程序

    干净win7要做几步才能运行第一个Spring MVC 写的动态web程序: 1. 下载安装jdk 2. 配置Java环境变量 3. 测试一下第1,2两步是否完全成功:http://jingyan.b ...

  7. ucenter

    1 UCenter 的目录结构 2API接口 3返回标签数据示例 (PHP) 4应用接口函数 5短消息接口函数 6积分接口函数 7邮件接口函数 8事件接口函数 9头像接口函数 10好友接口函数 11用 ...

  8. myeclipse项目 不能打开

    重启电脑后, myeclipse项目 不能打开了, 之前都是好好的!! 出现: Failed to read the project description file (.project) for ' ...

  9. HTTP Status 400 - description The request sent by the client was syntactically incorrect.

    HTTP Status 400 - type Status report message description The request sent by the client was syntacti ...

  10. ssm学习的第一个demo---crm(1)

    这是一个普通的CRM项目 (第一步规划好项目设计路线:导入jar包→配置sqlMapConfig.xml(空文件)→配置applicationContext.xml →配置springMVC.xml→ ...