# ----------------------------------------- 字段 class Class: # 静态字段,属于类 # 已经创建,并且存放在类里,而不是每创建一个对象创建一次; country = ‘中国‘ def __init__(self, name): # 普通字段-->> 保存在创建的对象里 self.name = name # 普通方法-->> 保存在类里 def show(self): print(self.name) # 实例化对象 obj = Class(‘Mic‘) print(obj.name) obj.show() # 通过类对象获取静态字段 print(Class.country) # print(Class.name) # 普通字段存放在对象中,无法通过类访问; # 对象可以通过类对象指针(引用)访问到静态属性 print(obj.country)
# ------------------------------ 方法 class MethodTest(): # 普通方法 def test1(self): # self指创建的对象 print(‘run-------1‘) # 静态方法 @staticmethod def test2(): # 这个时候self就不是必须的,当然你要是写了,就需要传入一个参数 print(‘run-------2‘) # 类方法 @classmethod def test3(cls): # 这里传入的cls参数是python自动传入的类名 print(cls) print(‘run-------3‘) # ----------------- 调用普通方法 # 1.创建一个对象,通过对象间接访问类中的普通方法 obj = MethodTest() obj.test1() # 2.通过来直接访问普通方法,但是前提是先创建一个对象 # 因为普通方法第一个参数self就代指创建的对象 MethodTest.test1(obj) # ------------------ 调用静态方法 # 类直接调用,类似于写了一个函数,毕竟创建一个对象会占用内容 MethodTest.test2() # ---------------- 调用类方法 MethodTest.test3() # 分别什么时候使用? # 1.我们需要用到对象中的值,就使用普通方法; # 2.如果不需要任何对象中的值,就使用静态方法; # 3.其实,如果需要在静态方法中用到类名,作为参数传入就相当于类方法; # 就是说,类方法完全可以通过静态方法构造出来 # 而且很少需要在方法中用到类名,所以没必要使用类方法
# ------------------------------属性 class Attr(): @property def test4(self): print(‘run-------4‘) return ‘run4‘ @test4.setter def test4(self, param): print(param) @test4.deleter def test4(self): print(‘delete------4‘) obj = Attr() # obj.test4() # 报错 obj.test4 print(obj.test4) # 赋值 obj.test4 = ‘change_val‘ # print(obj.test4) # 报错 # 如果一定要赋值呢? print(obj.test4) # 删除 del obj.test4 # >>> 其实并没有对这个字段进行修改, # 只是通过这样的操作,执行对应装饰器下的方法; # 就是一个对应关系;
# ----------------- 用property装饰器,完成分页效果 class Paginator(object): def __init__(self, current_page): try: p = int(current_page) except Exception as e: p =1 self.page = p @property def start(self): val = (self.page-1) * 10 return val @property def end(self): val = self.page*10 return val a = list() for i in range(1000): a.append(i) while True: p = input(‘请输入查看的页面:‘) obj = Paginator(p) print(a[obj.start:obj.end])
# --------------------------- 用property()完成上面的效果 class ClassFunc(): def test1(self): return ‘Mic‘ def test2(self, param): print(param) def test3(self): print(‘del‘) per = property(fget=test1, fset=test2, fdel=test3) obj = ClassFunc() # 1.调用方法 # ret = obj.per # print(ret) # 2.赋值 # obj.per = ‘Mic‘ # 3.删除 del obj.per
时间: 2024-10-11 20:01:54