1.0 面向对象类成员:
1.1 字段
1.1.1 普通字段,保存在对象里面,调用 不用(),只能通过对象访问。
1.1.2 静态字段,把普通字段写到类里面就是静态字段,表示默认值。可以直接用类直接调用,或者用对象
1.2 方法
1.2.1 普通方法,保存在类里面,调用 用对象,方法(),self是调用者对象
1.2.2 静态方法,保存在类里面
1.2.2.1 加上装饰器@staticmethond,
1.2.2.2 self不是必须的,可以不用传参,
1.2.2.3 不用创建对象,直接用类就可以调用,类似于一个函数
1.2.3 类方法,保存在类里面,由类直接调用,cls 当前类
1.2.4 应用场景:
1.2.4.1 如果对象中需要保存一些值,执行功能时,需要使用对象中的值,用普通方法
1.2.4.2 如果不需要任何对象中的值,用静态方法,
1.2.4.3 如果不需要任何对象中的值,但是会用到当前类,就类方法
以下普通的类成员:
class Foo: def __init__(self,name): #普通字段,保存在object里面 self.name = name def show(self): #普通方法,保存在类里面 print('self.name') obj = Foo() obj.name #字段不用() obj.show() #方法用()调用
以下是静态字段:
class Province: #静态字段属于类,在内存中只保存一份 country = 'China' def __init__(self,name): #普通字段,属于对象 self.name print(Province.country) #静态字段,可以用类直接调用
用对象访问静态字段:
class Province: #静态字段属于类,在内存中只保存一份 country = 'China' def __init__(self,name): #普通字段,属于对象 self.name = name hunnan = Province('hunnan') #创建对象 print(hunnan.name) #访问普通字段 print(hunnan.country) #用对象 访问静态字段 hunnan.name = 'hunnan cz' #修改普通字段
普通方法的调用:
class Foo: def bar(self): print('bar') #方法一 obj = Foo() obj.bar() #方法二 obj = Foo() Foo.bar(obj)
类方法:
class Foo: def bar(self): print('bar') @staticmethod #装饰器,就是静态方法 def status(): #静态方法,self不是必须的,所以可以直拉用类调用,不用传参 print('123') @staticmethod def stak(a1,a2): print(a1,a2) @classmethod def classmd(cls): #类方法,self要用cls代替 #cls 是类名,不依赖对像,通过类直接执行 print(cls) #默认把cls传了 print('classmd') Foo.classmd() Foo.status() Foo.stak(1,2)
1.3 属性
@property,加个这个属性后,方法调用不要用(),要像字段一样,object.方法 就可以了
class Tech: def __init__(self): self.name = 'a' def bar(self): print('bar') @property #属性,加个这个属性后,方法调用不要用(),要像字段一样,object.方法 就可以了 def perfect(self): print('perfect') return 123 obj = Tech() obj.perfect result = print(obj.perfect)
class Tech: def __init__(self): self.name = 'a' def bar(self): print('bar') @property #属性,加个这个属性后,方法调用不要用(),要像字段一样,object.方法 就可以了 def perfect(self): #获取值 ,不会真的获取,只是一一对应关系,找到这个位置 print('perfect') return 123 @perfect.setter #设置值,不会真的设置,只是一一对应关系,找到这个位置 def perfect(self,att1): print(att1) @perfect.deleter #删除值,,不会真的删除,只是一一对应关系,找到这个位置 def perfect(self): print(666) obj = Tech() obj.perfect result = print(obj.perfect) obj.perfect = 456 del obj.perfect
属性实现翻页功能:
li = [] for i in range(1000): li.append(i) while True: page = input('please inter the page:') page = int(page) start_page = (page-1) * 10 end_page = page * 10 print(li[start_page:end_page])
class Pagination: def __init__(self,current_page): try: page = int(current_page) except Exception as e: page = 1 self.page = p @property def start_page(self): val = (self.page - 1) * 10 return val @property def end_page(self): val = self.page * 10 return val li = [] for i in range(1000): li.append(i) while True: p = input('please inter the page:') p = int(p) obj = Pagination(p) print(li[obj.start_page:obj.end_page])
property (fget,fset,fdel) 也可以这样来设定属性