学习笔记10

类与对象
对象=属性+方法
用class定义Python类,然后接类的名称和冒号。

  • 继承:子类自动共享父类之间数据和方法的机制。
  • 多态:不同对象对同一方法响应不同的行动。

python的self相当于C++的this指针。 self是类中一个额外的第一个参数名称 在调用方法时 无需明确提供与参数self相对应的参数。
魔法方法:init(self[,param1,param2…])这个方法在类实例化时会自动调用。
python在变量名或者函数名前加 __ 函数或变量就会成为私有的元素。但是python的私有并不是真正的私有,仍然可以通过其他的输出方式来输出。python的私有只是把变量或者函数的名称进行了改变。
python支持多继承,但是尽量不要使用多继承,容易引起混乱。
类:
类对象:创建一个类,就是一个对象在内存开辟了一块空间,称为类对象,类对象只有一个。
实例对象:通过实例化创建的对象,称为实例对象,实例对象可以有多个。
类属性:类里面方法之前定义的变量就为类属性。多个实例对象之间共享一个类属性。
实例属性:实例属性和具体的某个实例对象有关系,只能在自己的对象里面使用。
属性和方法名相同会使属性覆盖方法。
python要求方法需要有实例才能被调用,这就是python的绑定概念。
直接访问__dict__可以获取python对象的数据属性。
内置函数(BIF)
issubclass(class,classinfo)判断class是否为classinfo的子类。 一个类是其自身的子类。
isinstance(object,classinfo)判断一个对象是否为一个已知的类型。
type()不考虑继承关系,isinstance考虑继承关系。
hasattr(object,name)判断对象是否包含对应的属性。
getattr(object,name[,default])用于返回一个对象属性值。
setattr(object,name,value)设置一个属性值,属性不一定存在。
delattr(object,name)删除一个属性。
class property([fget[,fset[,fdel[,doc]]]])在新式类中返回属性值。

  • fget 获取属性值的函数
  • fset 设置属性值的函数
  • fdel 删除属性值函数
  • doc 属性描述信息
    练习题:
  1. ??????
  2. 在方法前面加上 __
  3. 没有在括号中添加self关键字
class Ticket():
    def __init__(self, adult, kid, day):
        self.adult = adult
        self.kid = kid
        self.day = day
        self.price = 100

    def sum_price(self):
        if self.day in range(1,6): 
            print("总票价为: %d 元" %(self.price * (self.adult+self.kid/2)))
        else:
            print("总票价为: %d 元" %(self.price*1.2 * (self.adult+self.kid/2)))
p = Ticket(3, 1, 5)
p.sum_price()

魔法方法
魔法方法总是被双下划线包围。

  • init(self)初始化方法
  • new(cls)对当前类进行实例化,并将实例返回。
  • del(self)将一个对象进行系统回收。
  • getattr(self,name):定义当用户试图获取一个不存在的属性时的行为。
  • getattribute.(self,name):定义当该类的属性被访问时的行为(先调用该方法,查看是否存在该属性,若
    不存在,接着去调用_getattr__)。
  • setattr(self,name,value):定义当一个属性被设置时的行为。
  • delattr(self,name):定义当一个属性被删除时的行为。
  • _get(self,instance,owner)用于访问属性,它返回属性的值。
  • set(self,instance,value)将在属性分配操作中调用,不返回任何内容。
  • del(self, instance)控制删除操作,不返回任何内容。

定制序列
如果定制的容器不可变,只定义__len__()和__getitem__()方法。
如果可变还需要定义__setitem__() delitem()
练习题
1.
new:构造函数,创建并返回一个实例对象
init:初始化函数,在创建实例对象为其赋值时使用
str:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息
repr_:str的备胎,在有__str__的时候执行__str__,没有实现__str__的时候,执行__repr__
getitem:定义获取容器中元素的行为
setitem:定义设置容器中指定元素的行为
2.

import time
class Timer():
    def __init__(self):
        print()
        self.__info = '未开始计时!'
        self.__kaishi = None
        self.__jieshu = None
        self.__jg = 0
    def __str__(self):
        return self.__info
    def __repr__(self):
        return self.__info
    def start(self):
        print('计时开始')
        self.__kaishi = time.localtime()
    def stop(self):
        if not self.__kaishi:
            print('提示:请先调用start()开始计时!')
            return
        self.__jieshu = time.localtime()
        self.__jg = time.mktime(self.__jieshu) - time.mktime(self.__kaishi)
        self.__info = '共运行了%d秒' % self.__jg
        print('计时结束!')
        return self.__jg
    def __add__(self, other):
        return '共运行了%d秒' % (other.__jg + self.__jg)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值