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

原文地址:https://www.cnblogs.com/rollost/p/10930828.html