Django1.5:(一)相关的Python语法4

7. 类和面向对象编程

       类是创建新对象类型的机制。类定义了一组属性,这些属性与一组实例对象相关且由它们共享。类通常是由函数(称为方法)、变量(称为类变量)和计算出的属性(称为特性)组成的集合。用class关键字创建类,可以看做是实例的蓝本。下面看一个例子:

class Account(object):
    version = 1.0 #这两个是类的静态成员,在所有实例之间共享,version是版本号
    num_account = 0 #跟踪存在多少个实例,可以访问Account.num_accounts
    def __init__(self, name, balance): #self指向类的一个特定实例
        self.name = name #点属性的方式查找
        self.balance = balance
        Account.num_account += 1
    def __del__(self):
        Account.num_account =+ 1
    def deposit(self, amt):
        self.balance = self.balance + amt
    def withdraw(self, amt):
        self.balance = self.balance - amt
    def inquiry(self):
        return self.balance

       在方法中,总是通过self引用实例的属性(如self.balance,而不是balance),从一个方法中调用另一个方式时也需要用这种方式。Python中实例化类,就像调用函数一样即可,不必像其他语言中用new语句来创建。实例化一个对象,需要传入__init__所需的参数,Python在创建对象时会自动调用__init__,并返回该新创建的对象。Python还支持一个非常灵活的特性——动态的实例属性,哪些没有在类定义里声明的属性,可以在实例中制作出来,例如对于Account的实例account,可以用account.time = '2013'创造一个time属性。

       继承:创建一个子类需要提供一个或多个基类,目的是专门使用或修改现有类的行为。当需要重写某个基类方法时,需要显式地调用它。子类也可以定义自己的__init__()版本,但派生类这样定义时,不会自动调用基类的__init__,需要显式地初始化。

class EvilAccount(Account):
    def __init__(self, name, balance, evilfactor):
        Account.__init__(self, name, balance) #初始化Account
        self.evilfactor = evilfactor
    def inquiry(self):
        if random.randint(0, 4) == 1:
            return self.balance * self.evilfactor
        else:
            return self.balance

     嵌套类:就像嵌套函数一样,也可以创建嵌套类,即在类的内部定义类。嵌套类也是一个Python类,但它只在外层类实例的内部才可见,这在Django中比较常用,如Meta嵌套类。Django的数据model是从内置类django.db.models.Model继承而来的子类,例如:


from django.db import models
from django,contrib import admin
class BlogPost(models.Model):
    title = models.CharField(max_length=150)
    body = models.TextFeild()
    timestamp = models.DatetimeFeild()
    class Meta:
        ordering = ('-timestamp',)

      关于类这个话题,还有非常多的内容,如静态方法和类方法、描述符、元类等等,但这里指介绍与Django应用最相关的。

8. 正则表达式

       正则表达式用于匹配字符串,在Django中用于定义网站的URL,非常重要。Python的正则表达式通过re模块访问,字符串通常用自然字符串表示。关于正则表达式,有两个不同概念,“查找”和“匹配”,查找是在目标字符串里搜寻任何匹配的模式,而匹配则表示整个字符串都要符合模式的描述。

       建议阅读《python参考手册》(4th) p228-233或《Python正则表达式指南》一文。我将后续补充Django中常见URL正则表达式匹配示例。


至此,对于Python的简单介绍就结束了,下面我们以Django 1.5 + Python 3.3由浅入深地学习Django框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值