• 【Rollo的Python之路】Python 面向对象 (四) 类成员


    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) 也可以这样来设定属性

  • 相关阅读:
    Nginx负载均衡
    MySQL主从复制
    笔记
    tomcat工作原理
    Nginx工作原理
    Loj#6183. 看无可看
    [BZOJ 2759] 一个动态树好题
    5255 -- 【FJOI2016】神秘数
    [NOI2015]寿司晚宴
    [CQOI2017]老C的键盘
  • 原文地址:https://www.cnblogs.com/rollost/p/10930828.html
Copyright © 2020-2023  润新知