zoukankan      html  css  js  c++  java
  • 面向对象的静态属性,类方法,静态方法

    class cesuo:
    
        addr = '九江'
        def __init__(self, name, h, l, k):
            self.name = name
            self.h = h
            self.l = l
            self.k = k
        @property #封装逻辑,让调用用户感知不存在,只和实例绑定
        def cal(self):
            return ('%s体积是%s'%(self.name, self.h * self.l * self.k))
    
        @classmethod  #类方法,只和类捆绑,能访问到类的数据属性和函数属性,不能访问到实例的数据属性
        def tell_info(cls):
            print(cls.addr)
    
        @staticmethod  #静态方法,允许类和实例调用。不能访问类属性也不能访问实例属性,只能接收外部传值
        def test(x,y,z):
            print(x,y,z)
    
    
    s1 = cesuo('公厕',12,23,11)
    print(s1.cal) #通过实例的静态熟悉去调用
    
    
    cesuo.tell_info() #通过类方法,把类自己传递进去,好处是不需要实例化对象出来再去访问
    
    cesuo.test(1,2,3)  #调用静态方法
    s1.test(5,6,7)

    为什么要用property

    将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则

    staticmethod:

      不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

    classmethod:

    classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入)

  • 相关阅读:
    37.Spring-事务控制.md
    35.Spring-jdbc支持.md
    29.Hibernate-二级缓存和session管理.md
    28.Hibernate-HQL查询.md
    27.Hibernate-缓存和懒加载.md
    26.Hibernate-主键和映射.md
    25.Hibernate-配置文件.md
    24.Hibernate-各种类型的查询.md
    MarkDown学习记录
    gitbook使用
  • 原文地址:https://www.cnblogs.com/zhengyiqun1992/p/10177741.html
Copyright © 2011-2022 走看看