计算所居住房子的面积

普通写法

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.width)) r1=Room('别墅','憨憨',100,100,100)
r2=Room('大别墅','玫玫',1000,1000,1000) r1.cal_area() # 憨憨 住的 别墅 总面积为 10000
r2.cal_area() # 玫玫 住的 大别墅 总面积为 1000000

property 写法

# property 用法
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 @property # 装饰器property 可以将 方法 转化为属性 在下面调用时 不需要带括号
def cal_area(self):
print('%s 住的 %s 总面积为 %s' % (self.owner, self.name, self.heigh * self.width)) r1 = Room('别墅', '憨憨', 100, 100, 100)
r2 = Room('大别墅', '玫玫', 1000, 1000, 1000) r1.cal_area # 憨憨 住的 别墅 总面积为 10000
r2.cal_area # 玫玫 住的 大别墅 总面积为 1000000

类方法(classmethod)

class Room:

    tag=1
def __init__(self,name,owner,width,length,heigh):
self.name=name
self.owner=owner
self.width=width
self.lenth=length
self.heigh=heigh
@property
def cal_area(self,): return self.heigh*self.width def test(self,): print('from test',self.name) @classmethod # 变为了类方法
def tell_info(cls):
print(cls)
print('---->', cls.tag) # def tell_info(self):
# print('---->',self.tag) print(Room.tag) #
# r1=Room('别墅','憨憨',100,100,100)
# Room.test('测试') #Room.tell_info(r1) # ----> 1
Room.tell_info() # ----> 1 拥有cls 就不需要实例化对象了

静态方法

class Room:

    tag=1
def __init__(self,name,owner,width,length,heigh):
self.name=name
self.owner=owner
self.width=width
self.lenth=length
self.heigh=heigh
@property # 静态属性
def cal_area(self,): return self.heigh*self.width def test(self,): print('from test',self.name) @classmethod # 变为了类方法
def tell_info(cls):
print(cls)
print('---->', cls.tag) @staticmethod # 静态方法只是名义上归属性管理,不能使用类变量和实例变量,是类的工具包
def wash_body(a,b,c):
print('%s %s %s 正在洗澡 '%(a,b,c)) def test(x,y,z):
print(x,y,z) Room.wash_body('k','l','o') # k l o 正在洗澡
r1=Room('别墅','憨憨',100,100,100)
r1.wash_body('k','l','o') # k l o 正在洗澡 Room.test('k','l','o') # k l o
r1.test('k','l','o') # 报错了 不能这样调用 因为test 不是静态方法

静态方法

Python学习第十六课——静态属性(property, classmethod, staticmethod)的更多相关文章

  1. Python学习第二十六课——PyMySql(python 链接数据库)

    Python 链接数据库: 需要先安装pymysql 包 可以设置中安装,也可以pip install pymysql 安装 加载驱动: import pymysql # 需要先安装pymysql 包 ...

  2. Python 学习 第十六篇:networkx

    networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边 ...

  3. python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作

    django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...

  4. Python学习(十六)—— 数据库

    一.数据库介绍 数据库(Database,DB)是按照数据结构来组织.存储和管理数据的,并且是建立在计算机存储设备上的仓库. 数据库指的是以一定方式存储在一起.能为多个用户共享.具有尽可能小的冗余度. ...

  5. Python学习第十六篇——异常处理

    在实际中,很多时候时候,我们并不能保证我们所写的程序是完美的.比如我们程序的本意是:用户在输入框内输入数字,并进行后续数学运算,即使我们提醒了用户需要输入数字而不是文本,但是有时会无意或者恶意输入字符 ...

  6. Python学习札记(十六) 高级特性2 迭代

    参考:迭代 Note 1.如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在C.C++.Java等语言中,for循 ...

  7. Python学习日记(十六) time模块和random模块

    time模块 python表示时间的三种方式:时间戳.元祖(struct_time).格式化时间字符串 三种格式之间的转换: 1.时间戳 就是从1970年1月1日0点0分0秒开始按秒计算的偏移量,时间 ...

  8. Python学习,第六课 - 集合

    Python中集合的相关操作 集合是一个无序的,不重复的数据组合 它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 list_1 =set ...

  9. Python学习第十五课——类的基本思想(实例化对象,类对象)

    类的基本思想 类:把一类事物的相同的特征和动作整合到一起就是类类是一个抽象的概念 对象:就是基于类而创建的一个具体的事物(具体存在的)也是特征和动作整合到一块 对象写法 # 对象写法 def scho ...

随机推荐

  1. java 数据类型优先级

    由低到高:byte,short,char—> int —> long—> float —> double 1. 不能对boolean类型进行类型转换. 2. 不能把对象类型转换 ...

  2. LaunchPad

    链接:https://ac.nowcoder.com/acm/contest/3665/D来源:牛客网 Hery is a boy with strong practical abilities. N ...

  3. mui 获取本地APP本版号的两种方式

    第一种 mui.plusReady(function () { mui.getJSON("manifest.json", null, function (data) { vum = ...

  4. jsp用equals判断两个字符串变量是否相等

    使用即可: s1.equals(s2) 如果使用场景: if(s1==s2){} 这样使用可能会出现判断无效的情况. 使用if(s1.equals(s2)){}就可以了.

  5. 解决linux 运行自动化脚本浏览器无法启动问题

    1.前提你的驱动和版本对应无问题时,依旧报未知错误无法启动chrome 解决方法加上两行: options.addArguments("no-sandbox");options.a ...

  6. Kafka .net 开发入门

    Kafka安装 首先我们需要在windows服务器上安装kafka以及zookeeper,有关zookeeper的介绍将会在后续进行讲解. 在网上可以找到相应的安装方式,我采用的是腾讯云服务器,借鉴的 ...

  7. Maven中配置jdk的版本

    在单个项目中配置 在maven项目的pom.xml文件中加入以下内容 <build> <plugins> <plugin> <groupId>org.a ...

  8. 一行代码解决 sql语句 in传入数组变字符串

    --数组 var arrs= ['test1','test2','test3'];--变字符串 var instring = "'"+arrs.join("','&quo ...

  9. 吴裕雄--天生自然Python Matplotlib库学习笔记:matplotlib绘图(1)

    Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式. from pylab import * size = 128, ...

  10. 确定BP神经网络中的节点数

    输入层 输入层节点数=输入向量维数 MNIST例子中,单张MNIST图片大小为28*28,reshape为一维数组,长度为784,所以输入层节点数为784: network = Network([78 ...