类成员、成员修饰符
目录:
一、什么是类
类三大特性:
-
封装
-
函数封装到类
-
数据封装到对象 *
class Foo: def __init__(self,name,age): self.name = name self.age = age obj = Foo('alex',19)
-
-
继承
-
多态
类定义传送门:https://www.cnblogs.com/wupeiqi/p/4493506.html
二、类成员
成员分类:
- 类
- 类变量
- 绑定方法
- 类方法
- 静态方法
- 属性
- 实例(对象)
- 实例变量
1.类方法(普通方法/绑定方法):
- 定义:至少有一个self参数
- 执行:先创建对象,由对象.方法()。
-
class Foo: def func(self,a,b): print(a,b) obj = Foo() obj.func(1,2) # ########################### class Foo: def __init__(self): self.name = 123 def func(self, a, b): print(self.name, a, b) obj = Foo() obj.func(1, 2)
2.静态方法
- 定义:
- @staticmethod装饰器
- 参数无限制
- 执行:
- 类.静态方法名 ()
- 对象.静态方法() (不推荐)
-
class Foo: def __init__(self): self.name = 123 def func(self, a, b): print(self.name, a, b) @staticmethod def f1(): print(123) obj = Foo() obj.func(1, 2) Foo.f1() obj.f1() # 不推荐
3. 类方法
- 定义:
- @classmethod装饰器
- 至少有cls参数,当前类。
- 执行:
- 类.类方法()
- 对象.类方法() (不推荐)
-
class Foo: def __init__(self): self.name = 123 def func(self, a, b): print(self.name, a, b) @staticmethod def f1(): print(123) @classmethod def f2(cls,a,b): print('cls是当前类',cls) print(a,b) obj = Foo() obj.func(1, 2) Foo.f1() Foo.f2(1,2)
4.属性
- 定义:
- @property装饰器
- 只有一个self参数
- 执行:
- 对象.方法 不用加括号。
-
class Foo: @property def func(self): print(123) return 666 obj = Foo() result = obj.func print(result)
-
# 属性的应用 class Page: def __init__(self, total_count, current_page, per_page_count=10): self.total_count = total_count self.per_page_count = per_page_count self.current_page = current_page @property def start_index(self): return (self.current_page - 1) * self.per_page_count @property def end_index(self): return self.current_page * self.per_page_count USER_LIST = [] for i in range(321): USER_LIST.append('alex-%s' % (i,)) # 请实现分页展示: current_page = int(input('请输入要查看的页码:')) p = Page(321, current_page) data_list = USER_LIST[p.start_index:p.end_index] for item in data_list: print(item)
三、成员修饰符
- 公有,所有地方都能访问到。
- 私有,只有自己可以访问到。
-
class Foo: def __init__(self, name): self.__name = name def func(self): print(self.__name) obj = Foo('alex') # print(obj.__name) obj.func()
-
class Foo: __x = 1 @staticmethod def func(): print(Foo.__x) # print(Foo.__x) Foo.func()
-
class Foo: def __fun(self): print('msg') def show(self): self.__fun() obj = Foo() # obj.__fun() obj.show()