zoukankan      html  css  js  c++  java
  • 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




  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9846794.html
Copyright © 2011-2022 走看看