六、类、对象与魔法方法

类与对象

1、类定义中哪些是类属性,哪些是实例属性?
Python类数据属性:定义在类里面但在函数外面的变量,它们都是静态的。
定义在__init__()方法里的变量就是实例属性,这些属性只有对象被创建时才会被创建。
2、怎么定义私有⽅法?
在 Python 中定义私有方法只需要在函数名前加上两个下划线“__”,那么这个方法(函数)就为私有的了。

3、尝试执行以下代码,并解释错误原因:

class C:
    def myFun():
        print('Hello!')
    c = C()
    c.myFun()

NameError: name ‘C’ is not defined
错误原因:c = C()是类实例化,应该在类的外面,因此c = C() 和c.myFun()缩进不对,改正后代码如下,再次运行:

class C:
    def myFun():
        print('Hello!')
c = C()
c.myFun()

仍然报出以下错误:
TypeError: myFun() takes 0 positional arguments but 1 was given
原因:调用 c.myFun()时,系统自动将类实例对象c传入myFun(),但myFun()定义时缺少参数self,改正后再次运行,运行正确。

class C:
    def myFun(self):
        print('Hello!')
c = C()
c.myFun()

Hello!

4、按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价。

  1. 平日票价100元
  2. 周末票价为平日的120%
  3. 儿童票半价
class Ticket():
    ticket= 100
    def weekend(self):
        self.ticket *= 1.2
        return self.ticket
    def children(self):
        self.ticket *= 0.5
        return self.ticket

man=Ticket()
a=man.ticket
# a=man.weekend()
print(a)
child=Ticket()
# child.weekend()
b=child.children()
print(b)
price=2*a+b
print(price)

魔法方法

1、总结多种魔法方法,如__new__ , init , str , rstr , getitem , setitem 等等,的使用方法。
①__new__:构造函数,创建并返回一个实例对象,如果__new__只调用了一次,就会得到一个对象。继承自object的新式类才有__new__这一魔法方法。
参数:至少必须要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供。
返回值:必须要有返回值,返回实例化出来的实例。可以return 父类__new__出来的实例,或者直接是object的__new__出来的实例。若__new__没有正确返回当前类cls的实例,那__init__是不会被调用的,即使是父类的实例也不行。
__new__是唯一在实例创建之前执行的方法,一般用在定义元类时使用。

②__init__:初始化函数,在创建实例对象为其赋值时使用,在__new__之后。
__init__必须至少有一个参数self,就是这个__new__返回的实例,__init__是在__new__的基础上可以完成一些其它初始化的动作。
init__不需要返回值。
③__str
:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。
__str__方法必须要return一个字符串类型的返回值,作为对实例对象的字符串描述。
str__实际上是被print函数默认调用的,当要print(实例对象)时,默认调用__str__方法,将其字符串描述返回。如果不是要用str()函数转换,当你打印一个类的时候,那么print首先调用的就是类里面的定义的__str。

④__repr__:str的备胎,在有__str__的时候执行__str__,没有实现__str__的时候,执行__repr__,repr(obj)内置函数对应的结果是__repr__的返回值
当你使用%r格式化的时候 触发__repr__。

⑤__getitem__:定义获取容器中元素的行为,相当于self[key]。

⑥__setitem__:定义设置容器中指定元素的行为,相当于self[key] = value。

2、利用python做一个简单的定时器类
要求:

  1. 定制一个计时器的类。
  2. start 和stop 方法代表启动计时和停止计时。
  3. 假设计时器对象t1 , print(t1) 和直接调用t1 均显示结果。
  4. 当计时器未启动或已经停止计时时,调用stop 方法会给予温馨的提示。
  5. 两个计时器对象可以进行相加: t1+t2 。
  6. 只能使用提供的有限资源完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值