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.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)  # 1
# 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 不是静态方法

静态方法

原文地址:https://www.cnblogs.com/pyhan/p/12312083.html

时间: 2024-11-11 18:02:54

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

Python 学习 第十六篇:networkx

networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边也可以拥有更多的属性,以存储更多的信息. 对于networkx创建的无向图,允许一条边的两个顶点是相同的,即允许出现自循环,但是不允许两个顶点之间存在多条边,即出现平行边. 边和顶点都可以有自定义的属性,属性称作边和顶点的数据,每一个属性都是一个Key:Value对. 一,创建图 在创建图之前,需要

python学习笔记十六 django深入学习一

django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), #精确匹配 url(r'^articles/([0-9]{4})/$', views.year_archive), #动态路由 url(r'^articles/([0-9]{4})/([0-9]{2

python学习第十二课

memcache 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. emcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后. 由于Redis只使用单核,而

python 学习第十二课

memcache 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. emcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后. 由于Redis只使用单核,而

JAVA学习第二十六课(多线程(六))- 多生产者多消费者问题

多生产者多消费者问题 以生产馒头 消费馒头为例. class Resource { private String name; private int count = 1; private boolean flag = false; public synchronized void set(String name) { if (flag) { try { this.wait(); } catch (Exception e) { // TODO: handle exception } } this.

JAVA学习第十六课(内部类及其特点)

内部类: 内部类就是一个类定义在一个类里,定义在类中的类就叫做内部类 一.访问特点: 内部类可以直接访问外部类的成员,包括私有成员 外部类要访问内部类的成员,必须创建内部类的对象 简单体现: import out.in; class out { private int num = 3; class in { public void showou() { System.out.println(num); } } public void showin() { in BLF = new in(); B

python学习第十四课--CSS

CSS css.doyoe.com Cascading Style Sheets 在标签中使用 style='xx:xxx;' 在页面中嵌入 <style type="text/css"> </style > 块 引入外部css文件  <link rel="stylesheet" type="text/css" href="mystyle.css"/> 1.   标签选择器 div  a  

python学习笔记(十六) - ORM框架(SQLAlchemy)

所谓的ORM就是Object-Relational Mapping,把关系数据库的表结果映射到对象上. 1. 安装SQLAlchemy: easy_install sqlalchemy 2. 导入SQLAlchemy,并初始化DBSession: # 导入: from sqlalchemy import Column, String, create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declara

Python学习(十六)内置函数,递归

1.递归 def test1(): num=int(input('输入数字')) if num%2==0: #判断输入数字是不是偶数 return True #是偶数,程序退出,返回true print('不是偶数请重新输入') return test1() #不是偶数的话继续调用自己,输入值 print(test1()) 递归的效率不高,最多递归999次 2.内置函数 python自带的函数 id()#看内存地址type()#看数据类型print()#打印input()#输入list() #转