Python学习(十一)------- 自定义类

已经两天没更新了,这两天比较心烦气燥,什么都看不下去,学不下去,大概是“大姨父”来了安静。连续两天站桩还真是累得不行,希望最佳状态快些回来吧,今天继续。


自定义类有两种语法格式:

class className:

    suit

这种语法格式不指定基类,在Python中,不指定基类的话,默认的基类就是object。所以在Python中,所有的类都是object的子类。如果要指定基类就要用另一种语法格式:

class className(base_classes):

    suit

其中的base_classes就是新创建的类的基类。在suit中就可以定义新类的方法了,用def来创建,就像创建一个全局函数那样。

在定义函数的过程中,可以使用一个隐含的参数self用来指代自己,就像C++中的this,只是在使用self的时候必须显式的使用,不能像this那样省略掉。

在Python中,创建对象分两个步骤,首先是创建一个原始对象,会调用__new__(),然后初始化对象,会调用__init()。在自定义类的时候,一般__new__()都不需要重新写,而__init__()几乎都要重写。

像这种在函数名开始和结尾处都有两个下划线的方法是特殊方法,自己定义的一般方法不应该以这样的方式命名,以防跟以后升级版本的特殊方法冲突。在子类的方法中如果想要调用基类的方法,可以使用super()来指定基类,然后用点操作符来调用基类的方法。


特性

如果想要对自定义类中的属性进行控制,可以使用特性来实现。

像圆类中的求面积函数,求周长函数等其实都可以看作是类的一个成员变量来取用,只是只读的,这样的成员函数完全可以用特性来描述。这样在需要这个值的时候,直接用特性而不需要调用方法就可以了。特性和方法的最显著的区别就是修饰器。修饰器是一个函数,该函数以一个函数或方法为参数,并返回参数修饰后的版本。修饰器是通过在名字前使用@符号来标记的。比如property修饰器函数,这个修饰器函数是一个内置函数,至多可以接受4个参数:一个获取者函数,一个设置者函数,一个删除者函数以及一个docstring。使用@property的效果与仅使用一个参数(获取者函数)调用property的效果是一样的,例如:

def area(self):

    return math.pi*(self.redius**2)

area = property(area)

更常用的是以下这种方式:

@property

def area(sef):

    return math.pi*(self.redius**2)

另外,很重要的一个,就如一开始所说的,可以把属性转换成特性来对其进行控制,这样,我们必须创建一个私有的属性,其中实际存放了数据,并提供获取者方法与设置者方法。私有的属性用前面以两个下划线开始,如:__radius等,然后定义其各种方法:

@property

def radius(self):

    """注释注释

    注释注释

    """

    return self.__redius


@redius.setter

def radius(self, radius):

    assert radius > 0, "radius must be......"

    self.__radius = radius

这两个方法是获取者方法和设置者方法,其他的两个发展由Python来设定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值