@property @classmethod @staticmethod




Python内置的@property装饰器就是负责把一个方法变成属性调用的
from math import pi
# class Circle():
#     def __init__(self,r,name):
#         self.r = r
#         self.name = name
#     @property
#     def chang(self):
#
#         return 2*pi*self.r
#     @property
#     def area(self):
#         return self.r**2*pi

# c1 = Circle(3,"小张")
#
# print(c1.r)
# print(c1.name)
# print(c1.chang)
# print(c1.area)

# class Goods:
#     __discount = 0.8
#     num=200
#     def __init__(self,name,price):
#         self.name = name
#         self.__price = price
#     @property
#     def price(self):
#         return self.__price * Goods.__discount
#     @classmethod   # 把一个方法 变成一个类中的方法,这个方法就直接可以被类调用,不需要依托任何对象
#     def change_discount(cls,new_discount):  # 修改折扣 类方法默认有一个参数cls代表这个类
#         cls.__discount = new_discount
#         cls.num = 100000
# apple = Goods(‘苹果‘,5)
# print(apple.price)
# Goods.change_discount(0.5)   # 类调用
# print(apple.price)
# apple.change_discount(10)    #对象调用
# print(apple.price)
# print(Goods.num)
# print(apple.num)

# 当这个方法的操作只涉及静态属性的时候 就应该使用staticmethod来装饰这个方法
# class Login:
#     def __init__(self,name,password):
#         self.name = name
#         self.pwd = password
#     def login(self):pass
#
#     @staticmethod
#     def get_usr_pwd():   # 静态方法
#         usr = input(‘用户名 :‘)
#         pwd = input(‘密码 :‘)
#         Login(usr,pwd)
#
# Login.get_usr_pwd()#不需要实例化对象,直接类名调用方法

# 在完全面向对象的程序中,
# 如果一个函数 既和对象没有关系 也和类没有关系 那么就用staticmethod将这个函数变成一个静态方法
#
# 类方法和静态方法 都是类调用的
# 对象可以调用类方法和静态方法么?   可以   一般情况下 推荐用类名调用
# 类方法 有一个默认参数 cls 代表这个类  cls
# 静态方法 没有默认的参数 就象函数一样

 

原文地址:https://www.cnblogs.com/chvv/p/9956150.html

时间: 2024-08-30 13:20:54

@property @classmethod @staticmethod的相关文章

day 封装,面向对象,@property @classmethod @staticmethod方法

一.封装 # 面向对象的三大特性 : 继承 多态 封装# 封装 : # 广义上的 # 狭义上的 :会对一种现象起一个专门属于它的名字 # 把一堆东西装在一个容器里 # 函数和属性装到了一个非全局的命名空间 -- 封装# class A:# __N = 'aaa' # 静态变量## print(A.__N) # python# pulic 公有的# private 私有的 # java完全面向对象的语言# public 公有的# protect 保护的# private 私有的 # 定义一个私有的

property classmethod staticmethod的用法

一:property的用法 1,@property 能够将一个方法伪装成一个属性,它并不会让你的代码有什么逻辑上的提高,只是从调用者的角度上换了一种方式,使之看起来更合理.调用方法从原来的的对象名.方法名(),变成了对象名.方法名. class Person: def __init__(self,name,weight,height): self.name = name self.__height = height self.__weight = weight @property def bmi

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

计算所居住房子的面积 普通写法 class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.lenth=length self.heigh=heigh def cal_area(self): print('%s 住的 %s 总面积为 %s' %(self.owner,self.name,self.heigh*self.widt

【转】Python @classmethod @staticmethod

今天读代码的时候发现Python的class定义中提及了@classmethod修饰符,然后查阅了一些材料一探究竟,先做个总结吧. 在Python中提到 classmethod 就要提到 staticmethod,不是因为二者有什么关系,而是为了让用户区分以便更清楚地写代码.在C++中,我们了解直接通过类名访问的函数称为类的静态函数,即static修饰的函数,可见C++中classmethod和staticmethod是一个概念. 那么python中二者有什么区别呢?先来看下二者如何在pytho

python 装饰器语法糖(@classmethod @staticmethod @property @name.)原理剖析和运用场景

引用:http://blog.csdn.net/slvher/article/details/42497781 这篇文章系统的介绍这几者之间的关系和区别.有兴趣的朋友可以到上面的链接查看原文,这里我把原文拷贝如下(如有侵权,通知马上删除) ==================================================================== 在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classme

Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系

先来一个实例场景,然后测试,比较,不懂的话到网上找资料: #!/usr/bin/env python #!/usr/bin/env python class Date(object):     def __init__(self,year=0,month=0,day=0):         self.year = year         self.month = month         self.day = day @staticmethod     def statictime(self

Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系二

先到百度找了一下资料,引用个重点,对比昨天实例来理解: 引用:http://blog.csdn.net/carolzhang8406/article/details/6856817 在Python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

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

class MyClass(object): def __init__(self): self._some_property = "properties are nice" self._some_other_property = "VERY nice" def normal_method(*args,**kwargs): print "calling normal_method({0},{1})".format(args,kwargs) @cla