美文网首页
python入门与进阶(9-11)

python入门与进阶(9-11)

作者: buaishengqi | 来源:发表于2018-05-07 13:18 被阅读12次

9-11 静态方法
看看思维导图


Python类.png
class Student():
    sum = 0  #一个班级学生的总数
    name = '小鱼'
    age = 0 
    def __init__(self,name,age): 
        
        self.name = name
        self.age = age  
        self.__class__ .sum += 1 #这是在构造函数里的操作
        print('当前班级学生总数为:' + str(self.__class__.sum))         
        # print(self.__class__.sum += 1)   #每次创建一个对象,说明班级多了一个学生
        
        
    def do_homework(self):
        print('homework')
        # 定义一个类方法的格式如下,@classmethod叫做装饰器
    @classmethod
    def plus_sum(cls):#实例方法用self,类方法用cls
        cls.sum += 1     #模仿实例方法的书写模式
        print(cls.sum)

    # 静态方法的格式
    # 静态方法和类方法和实例方法相比较不需要传递参数
    @staticmethod
    def add(x,y):
        print(Student.sum)#静态方法的内部也是可以访问类变量的 如图2
        print('this is a static method')



    # 来看看静态方法的调用方式!!! 
student1 = Student('石敢当',18)
student1.add(1,2)#静态方法被对象调用
Student.add(1,2)#静态方法也可以被类调用
# 如图1


# 思考一个问题,类方法和静态方法可不可以访问实例变量?
class Student():
    sum = 0  #一个班级学生的总数
    name = '小鱼'
    age = 0 
    def __init__(self,name,age): 
        
        self.name = name
        self.age = age  
        self.__class__ .sum += 1 #这是在构造函数里的操作
        #print('当前班级学生总数为:' + str(self.__class__.sum))         
        # print(self.__class__.sum += 1)   #每次创建一个对象,说明班级多了一个学生
        
        
    def do_homework(self):
        print('homework')
        # 定义一个类方法的格式如下,@classmethod叫做装饰器
    @classmethod
    def plus_sum(cls):#实例方法用self,类方法用cls
        cls.sum += 1     #模仿实例方法的书写模式
        #print(cls.sum)
        print(self.name)

    # 静态方法的格式
    # 静态方法和类方法和实例方法相比较不需要传递参数
    @staticmethod
    def add(x,y):
        #print(Student.sum)#静态方法的内部也是可以访问类变量的 如图2
        print(self.name)
        #print('this is a static method')



    # 来看看静态方法的调用方式!!! 
student1 = Student('石敢当',18)
student1.add(1,2)#静态方法被对象调用
Student.add(1,2)#静态方法也可以被类调用
student1.plus_sum()#对象访问类方法
Student.plus_sum()#类访问类方法

# 打印结果如图3所示,造成图3的原因如下
# 如果尝试在静态方法和类方法里引用实例变量会直接报错的
# 静态方法和类方法(类方法好用点),静态方法慎重使用
1.jpg 2.jpg 3.jpg

相关文章

网友评论

      本文标题:python入门与进阶(9-11)

      本文链接:https://www.haomeiwen.com/subject/rmjmrftx.html