python_class_类_对象_静态字段_普通字段_静态方法_普通方法_静态类_属性@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): #创建静态类,注意cls不是self了,cls是当前类名
# print('classmd')
# obj = Foo()
# obj.bar()
#
# Foo.sta1() #打印sta 所以静态方法就可以不用创建对象用于那些不用创建对象的函数
# Foo.sta2(1,2) #打印1 2

# #----------属性----------#
# 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之后,就可以把括号给去掉了

#----------以上用更简洁的方法----------#  *****
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 = 123456 #对应per = property(fget=f1,fset=f2,fdel=f3)中的fset=f2 执行f2()方法
del obj.per #对应per = property(fget=f1,fset=f2,fdel=f3)中的fdel=f3 执行f3()方法

那就,关机走人吧。。。

haijing in HZ
2018.10.24 22:50




猜你喜欢

转载自www.cnblogs.com/YiYA-blog/p/9846794.html