• python_静态字段_普通字段_静态方法@staticmethod__静态类@classmethod_属性@property、@per.setter、@per.deleter


    #Author:"haijing"
    #date:2018/10/24

    #----------用面向对象表示中国所有的省份----------#
    # class Province:
    # def __init__(self,name):
    # self.name=name
    # self.country='中国'
    # def show(self):
    # print(self.name,self.country)
    # henan = Province('河南')
    # henan.show() #打印 河南 中国
    # hebei = Province('河北')
    # hebei.show() #打印 河北 中国

    #----------用面向对象表示中国所有的省份,改进----------# *****
    # class Province:
    # country = '中国' #静态字段,属于类,保存共有的性质
    # def __init__(self,name):
    # self.name=name #普通字段,属于对象,只能通过对象访问
    # def show(self):
    # print(self.name,self.country)
    # henan = Province('河南') #henan为对象
    # henan.show() #打印 河南 中国
    # hebei = Province('河北') #hebei为对象
    # hebei.show() #打印 河北 中国
    # print(Province.country) #打印中国
    # print(hebei.country) #country为静态字段,可以由类调用,也可由对象调用
    # print(hebei.name) #由于普通字段在对象中,所以只能由对象调用
    # hebei.name = '河北2' #修改

    #----------普通方法和静态方法,静态类----------#
    # class Foo:
    # def bar(self): #普通方法 self是对象
    # print('bar')
    #
    # @staticmethod #只要加这一句装饰器,下班的sta就是静态方法
    # def sta1(): #静态方法中可以不加self,调用时也不能加参数,可以用Foo.sta()方法调用
    # print('sta')
    # @staticmethod #只要加这一句装饰器,下班的sta就是静态方法
    # def sta2(a1,a2): #静态方法中可以不加self,调用时也不能加参数,可以用Foo.sta()方法调用
    # print(a1,a2)
    #
    # @classmethod
    # def classmd(cls): #用 @classmethod 创建静态类,注意cls不是self了,cls是当前类名
    # print('classmd')
    # obj = Foo()
    # obj.bar()
    #
    # Foo.sta1() #打印sta 所以静态方法就可以不用创建对象用于那些不用创建对象的函数
    # Foo.sta2(1,2) #打印1 2

    # Foo.classmd() #打印 classmd 静态类可以这样直接用Foo调用,而不用去创建对象了

    # #----------属性----------#
    # class Foo:
    # def __init__(self):
    # self.name='haijing'
    # def bar(self):
    # print('666')
    # @property
    # def per(self): #属性
    # print('per')
    # obj=Foo()
    # obj.bar() #调用方法,需要加括号 打印666
    # print(obj.name) #调用字段,不用加括号 打印haijing
    # obj.per #调用这个,就不用加括号了,否则会报错 打印per

    #----------属性+互相传值----------#
    # class Foo:
    # def __init__(self):
    # self.name='haijing'
    # self.name_list = ['haijing','min']
    # def bar(self):
    # print('666')
    # @property
    # def per(self): #属性 第74行
    # print('per')
    # return self.name_list
    # @per.setter
    # def per(self,vall): #第77行 注意74和77二者之间的方法名字必须一样
    # print(vall)
    #
    #
    #第80行函数

    # def per(self): #在这个函数里面可以再定义别的函数去做删除的操作
    # print('666')
    #
    # obj = Foo()
    # obj.per #执行第74行的per()方法
    # r = obj.per = 233 #执行第77行的per()方法 r=['haijing','min']
    # del obj.per #执行第80行的per()方法 这一句并不能做删除的操作,只是这一行,就对应第80行的那个per()函数


    # #----------上述的应用----------#
    # li = []
    # for i in range(1000):
    # li.append(i)
    #
    # while 1:
    # p = input('请输入要查看的页码:')
    # p = int(p)
    #
    # #按照0-10、10-20、20-30.....
    # start = (p-1)*10
    # end = p*10
    # # print(li[0:10]) #拿出前十个 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    # print(li[start:end])

    #----------上述的应用,但是在实际的网页中,start和end是很难计算出来的,故此处添加一个函数----------#
    # class Pergination:
    # def __init__(self,current_page):
    # self.page = int(current_page)
    # @property
    # def start(self):
    # val = (self.page-1)*10
    # return val #返回给obj.start
    # @property
    # def end(self):
    # val = self.page*10
    # return val #返回给obj.end
    # li = []
    # for i in range(1000):
    # li.append(i)
    # while 1:
    # p = input('请输入要查看的页码:')
    # obj = Pergination(p)
    #
    # # print(li[0:10]) #拿出前十个 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    # #print(li[obj.start():obj.end()]) #为防止这些写凌乱,可以在start()上边加入@property
    # print(li[obj.start:obj.end]) #加上@property之后,就可以把括号给去掉了 *****
    # #print(li.Pergination.start():;i.Pergination.end()) #如果Pergibation中的方法没有形参,这样调用也可以的 *****


    #----------以上用更简洁的方法----------#  *****
    class Foo:
    def f1(self):
    return 123
    def f2(self,v1):
    print(v1)
    def f3(self):
    print('del')
    per = property(fget=f1,fset=f2,fdel=f3) #这一句中的fget=f1可以代替下面的三句 *****
    # @property
    # def per(self):
    # return 123

    obj = Foo()
    ret = obj.per #对应per = property(fget=f1,fset=f2,fdel=f3)中的fget=f1 执行f1()方法
    print(ret)

    obj.per = 456 #打印456对应per = property(fget=f1,fset=f2,fdel=f3)中的fset=f2 执行f2()方法,456为给f2()函数的形参传递的参数
    del obj.per #对应per = property(fget=f1,fset=f2,fdel=f3)中的fdel=f3 执行f3()方法,并不真的去删除某个参数或者函数,而只是一种对应关系而已

    那就,关机走人吧。。。

    haijing in HZ
    2018.10.24 22:50




  • 相关阅读:
    [转]windows下安装Object-C开发环境
    [转]Creating Unit Tests for ASP.NET MVC Applications (C#)
    [转]如何在.NET MVC中使用jQuery并返回JSON数据
    [转]发送邮件提示“551 User not local; please try ”错误的原因及解决办法
    getHibernateTemplate().saveOrUpdate 不运行
    1503171912-ny-一道水题
    HDU 3466 Proud Merchants(01背包)
    error while loading shared libraries: libevent-1.x.so.1
    Android开发实例之闹钟提醒
    iOS 处理方法中的可变參数
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9846794.html
Copyright © 2020-2023  润新知