类成员、成员修饰符

目录:

一、什么是类

类简介

  类三大特性:

  • 封装

    • 函数封装到类

    • 数据封装到对象 *

      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()

     

posted @ 2020-07-07 14:53  无夜。  阅读(102)  评论(0编辑  收藏  举报