zoukankan      html  css  js  c++  java
  • Day 19:面向对象【类方法】静态属性/静态属性/类方法

    静态属性  @property 

     1 class Mom:
     2     gender = "woman"
     3     def __init__(self,name,weight):
     4         self.name = name
     5         self.weight = weight
     6     @property#静态方法
     7     #把一个方法做成
     8     def cook_dinner(self):
     9         return " %s 今天做个,蛋糕"  % (self.name)
    10 
    11 m1 = Mom('XFD',120)
    12 # print(m1.cook_dinner())#这样执行就报错了
    13 print(m1.cook_dinner)#看起来是了调用了数据属性,实际上就是调用了方法
    14 #@property  有隐藏函数属性的作用,在外展示,好像是数据属性一样

    静态方法:我感觉没个卵用

     1 class Mom:
     2     gender = "woman"
     3     def __init__(self,name,weight):
     4         self.name = name
     5         self.weight = weight
     6     @staticmethod#
     7     def clean_up(a,b):#没有self 就和实例绑定
     8         return "XFD 正在擦%s,%s"  % (a,b)
     9     def clean_up1(a,b):
    10         return "XFD 正在擦%s,%s"  % (a,b)
    11 #
    12 print(Mom.clean_up('桌子',"凳子"))#XFD 正在擦桌子,凳子
    13 m1 = Mom("xfd",110)
    14 print(m1.clean_up('桌子',"凳子"))#实例也可以调用
    15 #@staticmethod 类的工具包
    16 #不跟类绑定,也不和实例绑定
    17 #Mom.clean_up1(1,2)这样是可以调用
    18 #m1.clean_up1(1,2) 这样不可以调用  :为什么呢?
    19 #(调用时会把自己(m1)传进去,但是我们又没有定义肯定报错咯)
    20 #加@staticmethod和不加有什么区别呢 ?
    21 静态方法只是名义上归类管理,不能使用类变量和实例变量
    @staticmethod

    类方法

    需求:不使用实例,怎么调用类的函数属性

    class Mom:
        gender = "woman"
        def __init__(self,name,weight):
            self.name = name
            self.weight = weight
        # @property#静态方法
        #把一个方法做成
        @classmethod#专门给类使用的方法
        def cook_dinner(cls):#记得这个关键字 cls 
            # 用classmethod时,要专门给定义一个这个方法供类调用
            return " %s 今天做个,蛋糕"  % (cls.gender)
    
        # def cook_dinner(self):
        #     return " %s 今天做个,蛋糕"  % (self.name)
    
    print(Mom.gender)
    M1 =Mom("XFD","110")
    # print(Mom.cook_dinner(M1))#这样调用不到。
    
    print(M1.cook_dinner())#如果使用类方法,只能通过实例来调用
    #类方法,那就是不通过实例,直接调用怎么办呢
    #@classmethod 把这个放置在类方法的前面类就可以直接调用了(cls)
    类方法@classmethod

    备注:类方法:记得只调用类的数据属性,不要cls. init里面的数据属性。那是实例用的!

  • 相关阅读:
    hadoop用到的shell脚本
    hadoop搭建完全分布式集群
    hadoop搭建伪分布式集群
    ARM Compute Library编译安装
    OpenBlas交叉编译安装
    正则表达式去除所有标签html标签
    xstream实现xml字符串与对象直接的转换
    spring-boot中使用mybatis-plus代码生成器让你轻松的完成单表的CURD
    开源、免费软件和网站分享
    2020春软件工程助教工作期末总结
  • 原文地址:https://www.cnblogs.com/sunjinchao/p/11108745.html
Copyright © 2011-2022 走看看