类、对象与魔法方法
类、对象
- 类(class):对事物的抽象概括
- 对象(object):是类的一个实例
- 类是对象的类型,通俗的讲就是,你定义一个整型的变量,变量类型是int,而你定义一个该类的对象,则对象的类型是类
- 类的作用就是封装
- 类对象:创建一个类,其实也是一个对象也在内存开辟了一块空间,称为类对象,类对象只有一个。
魔法方法
即类的专有方法,一些内置函数或者各种符号,值得注意是根据子类方法会覆盖父类方法的特性,达到重载运算符的效果,例如:
-
init : 构造函数,在生成对象时调用
-
del : 析构函数,释放对象时使用
-
repr : 打印,转换
-
setitem : 按照索引赋值
-
getitem: 按照索引获取值
-
len: 获得长度
-
cmp: 比较运算
-
call: 函数调用
-
add: 加运算
-
sub: 减运算
-
mul: 乘运算
-
truediv: 除运算
-
mod: 求余运算
-
pow: 乘方
练习题
1、以下类定义中哪些是类属性,哪些是实例属性?
class C:
num = 0
def __init__(self):
self.x = 4
self.y = 5
C.count = 6
答:
- 类属性:num=0
- 实例属性:self.x = 4,self.y = 5,C.count = 6
2、怎么定义私有方法?
答:在变量与函数前加’__'两个下划线
3、尝试执行以下代码,并解释错误原因:
class C:
def myFun():
print('Hello!')
c = C()
c.myFun()
- 错误1.实例化类对象时应该在类外部
- 错误2.类方法在定义时,至少需要一个参数,一般为self
4、按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价。
要求:
- 平日票价100元
- 周末票价为平日的120%
- 儿童票半价
class Ticket:
def __init__(self, num_adult, num_children):
self.value = 100
self.adult = num_adult
self.children = num_children
def compute(self, weekday):
value = self.value * self.adult + self.value * self.children * 0.5
if weekday:
return value
else:
return 1.2*value
ticket = Ticket(2, 1)
value = ticket.compute(0)
print(value)