zoukankan      html  css  js  c++  java
  • 静态属性、类方法、静态方法

    @property 将函数属性伪装成数据属性  静态属性

    @classmethod #类方法,专门给类使用,与实例无关,类方法只能访问类相关的属性,不能访问实例属性(与实例无关。。。)

    @staticmethod #类的工具包,staticmethod静态方法只是名义上的归属类管理,不能使用类变量和实例变量

    class Student:
        date = 'testdate'
        #姓名,性别,年龄
        def __init__(self,stu_name,stu_sex,stu_age,length,width,heigh):
            self.stu_name = stu_name
            self.stu_sex = stu_sex
            self.stu_age = stu_age
            self.length = length
            self.width = width
            self.heigh = heigh
    
        @classmethod    #类方法,专门给类使用,与实例无关,类方法只能访问类相关的属性,不能访问实例属性(与实例无关。。。)
        def go_school(cls,x):
            print('--->',cls,cls.date,x)
    
        # def go_school(self):#,vehicle
        #     print('%s骑着一个风似风火似火的上学了'%self.stu_name)#,vehicle
        #     return 1
    
        @property       #将函数属性伪装成数据属性
        def cal_area(self):
            print('%s 身高%s身宽%s 体积%s'%(self.stu_name,self.heigh,self.width,self.heigh*self.width))
    
        @staticmethod   #类的工具包,staticmethod静态方法只是名义上的归属类管理,不能使用类变量和实例变量
        def test1(x,y):     #类和实例都可以调用
            print(x,y)
    
        def test2(x,y):     #没有任何意义,类可调用,实例不能调用,self自动传
            print(x,y)
    
    stu1 = Student('李大江','',18,2,0.2,2)
    # print(stu1.cal_area)    #函数属性伪装成数据属性的方式去调用
    # print(stu1.stu_name)
    Student.go_school(1)

    实例:只有数据属性
    类:有数据属性和函数属性
    
    实例对象:可以调用类的数据属性和函数属性(依据函数作用域)
    
    @property(静态属性)---->将函数属性,伪装成数据属性访问
    类:不能调用  (调用只能拿到一个内存地址,并不会执行(拿到内存地址没什么用))
    实例:可以调用
    
    @classmethod(类方法)---->与类绑定,与实例无任何关系
    类:可以调用
    实例:不可以调用    (其实可以调用d1.test_classmethod(),不会出错,但是一般不会这样定义和调用)
    
    @staticmethod(静态方法-类的工具包)---->不与类绑定,也不与对象绑定,名义上归属类管理,但是不能调用类属性和实例属性
    类:可以调用
    实例:可以调用
    

    class Desk_base(object):
        def f2(self):
            pass
    
    
    class Desk(Desk_base):
        i = 'i类属性' #类属性
    
        #类:不可以调用
        #实例对象:可以调用
        #实例属性
        def __init__(self,name,width,length,heigh):
            self.name = name    #实例属性
            self.width = width
            self.length = length
            self.heigha = heigh
    
        #类:可以调用
        #实例:不可以调用
        #定义函数属性,但是没有任何意义,没有这样定义的,但不是错误
        def test_not_self():
            print('没有传self的方法')
    
        #类:可以调用
        #实例:可以调用
        #类的函数属性
        def test_self(self):
            print('类的普通方法')
            return self.name
    
        #类:不能调用(调用只能拿到一个内存地址,并不会执行)
        #实例:可以调用
        #与实例绑定,将函数属性,伪装成数据属性
        @property # 静态属性
        def test_property(self):
            return self.name
    
        #类:可以调用
        #实例:不可以调用(其实可以调用d1.test_classmethod(),不会出错,但是一般不会这样定义和调用)
        #与类绑定,与实例无任何关系
        @classmethod    #类方法
        def test_classmethod(cls):
            '''
            类方法不能调用实例属性
            可以调用类方法或类属性
            :return:
            '''
            return cls.i
    
        #类:可以调用
        #实例:可以调用
        #不与类绑定,也不与对象绑定,名义上归属类管理,但是不能调用类属性和实例属性
        @staticmethod   #静态方法(类的工具包)
        def test_staticmethod():
            return '静态方法'
    
    
    d1 = Desk('zk',100,100,101)
    '''
    实例:只有数据属性
    类:有数据属性和函数属性
    
    实例对象:可以调用类的数据属性和函数属性(依据函数作用域)
    
    @property(静态属性)---->将函数属性,伪装成数据属性访问
    类:不能调用  (调用只能拿到一个内存地址,并不会执行(拿到内存地址没什么用))
    实例:可以调用
    
    @classmethod(类方法)---->与类绑定,与实例无任何关系
    类:可以调用
    实例:不可以调用    (其实可以调用d1.test_classmethod(),不会出错,但是一般不会这样定义和调用)
    
    @staticmethod(静态方法-类的工具包)---->不与类绑定,也不与对象绑定,名义上归属类管理,但是不能调用类属性和实例属性
    类:可以调用
    实例:可以调用
    '''
    
  • 相关阅读:
    【CentOS 7】关于php留言本网站的搭建
    linux系统的初化始配置(临时生效和永久生效)
    时间同步ntp服务的安装与配置(作为客户端的配置)
    CentOS 7设置服务的开机启动
    辅助模型——通信图
    一.面向对象概论
    辅助模型——包图
    构建图
    部署图
    辅助模型——状态机图
  • 原文地址:https://www.cnblogs.com/shangpolu/p/6209897.html
Copyright © 2011-2022 走看看