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里面的数据属性。那是实例用的!

猜你喜欢

转载自www.cnblogs.com/sunjinchao/p/11108745.html