码迷,mamicode.com
首页 > 编程语言 > 详细

字段 | 方法 | 属性 | 类的成员 | Python

时间:2017-11-15 22:02:16      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:参数   执行   for   并且   ram   app   cep   pre   对象   

# ----------------------------------------- 字段
class Class:
    # 静态字段,属于类
    # 已经创建,并且存放在类里,而不是每创建一个对象创建一次;
    country = 中国

    def __init__(self, name):
        # 普通字段-->> 保存在创建的对象里
        self.name = name

    # 普通方法-->> 保存在类里
    def show(self):
        print(self.name)

# 实例化对象

obj = Class(Mic)
print(obj.name)
obj.show()

# 通过类对象获取静态字段
print(Class.country)
# print(Class.name) # 普通字段存放在对象中,无法通过类访问;

# 对象可以通过类对象指针(引用)访问到静态属性
print(obj.country)
# ------------------------------ 方法
class MethodTest():
    # 普通方法
    def test1(self):  # self指创建的对象
        print(run-------1)

    # 静态方法
    @staticmethod
    def test2():  # 这个时候self就不是必须的,当然你要是写了,就需要传入一个参数
        print(run-------2)

    # 类方法
    @classmethod
    def test3(cls):  # 这里传入的cls参数是python自动传入的类名
        print(cls)
        print(run-------3)

# ----------------- 调用普通方法
# 1.创建一个对象,通过对象间接访问类中的普通方法
obj = MethodTest()
obj.test1()

# 2.通过来直接访问普通方法,但是前提是先创建一个对象
# 因为普通方法第一个参数self就代指创建的对象
MethodTest.test1(obj)

# ------------------ 调用静态方法
# 类直接调用,类似于写了一个函数,毕竟创建一个对象会占用内容
MethodTest.test2()

# ---------------- 调用类方法
MethodTest.test3()

# 分别什么时候使用?
# 1.我们需要用到对象中的值,就使用普通方法;
# 2.如果不需要任何对象中的值,就使用静态方法;
# 3.其实,如果需要在静态方法中用到类名,作为参数传入就相当于类方法;
#   就是说,类方法完全可以通过静态方法构造出来
#   而且很少需要在方法中用到类名,所以没必要使用类方法
# ------------------------------属性
class Attr():
    @property
    def test4(self):
        print(run-------4)
        return run4

    @test4.setter
    def test4(self, param):
        print(param)

    @test4.deleter
    def test4(self):
        print(delete------4)

obj = Attr()
# obj.test4()  # 报错
obj.test4
print(obj.test4)

# 赋值
obj.test4 = change_val
# print(obj.test4)  # 报错

# 如果一定要赋值呢?
print(obj.test4)

# 删除
del obj.test4
# >>> 其实并没有对这个字段进行修改,
# 只是通过这样的操作,执行对应装饰器下的方法;
# 就是一个对应关系;
# ----------------- 用property装饰器,完成分页效果
class Paginator(object):
    def __init__(self, current_page):
        try:
            p = int(current_page)
        except Exception as e:
            p =1

        self.page = p

    @property
    def start(self):
        val = (self.page-1) * 10
        return val

    @property
    def end(self):
        val = self.page*10
        return val


a = list()
for i in range(1000):
    a.append(i)

while True:
    p = input(请输入查看的页面:)
    obj = Paginator(p)
    print(a[obj.start:obj.end])
# --------------------------- 用property()完成上面的效果

class ClassFunc():
    def test1(self):
        return Mic

    def test2(self, param):
        print(param)

    def test3(self):
        print(del)

    per = property(fget=test1, fset=test2, fdel=test3)


obj = ClassFunc()
# 1.调用方法
# ret = obj.per
# print(ret)

# 2.赋值
# obj.per = ‘Mic‘

# 3.删除
del obj.per

 

字段 | 方法 | 属性 | 类的成员 | Python

标签:参数   执行   for   并且   ram   app   cep   pre   对象   

原文地址:http://www.cnblogs.com/pymkl/p/7840662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!