类与对象
- 类属性:num=0
实例属性:self.x=4 self.y=5 C.count=6 - 在变量名或者函数名前加上两个下划线(__),这个函数或者变量就会变成私有
- 修改完的程序:
class C:
def myFun(self):
print('Hello!')
c=C()
c.myFun()
- 1
- 2
- 3
- 4
- 5
class Ticket:
def __init__(self,p=100, tp=0):
self.price = p
self.total_price = tp
def cost(self):
day = int(input("您想要购买哪天的票?请输入正整数1-7:"))
adult = int(input("请输入需要购买大人的票数(张):"))
child = int(input("请输入需要购买儿童的票数(张):"))
if day in range(1, 6):
self.total_price= adult * self.price + child * self.price * 0.5
print('总票价为:',self.total_price)
elif day in range(6, 8):
self.total_price = adult * self.price * 1.2 + child * self.price * 1.2 * 0.5
print('总票价为:',self.total_price)
m=Ticket()
m.cost()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
结果:
>>>
=============== RESTART: D:\BaiduNetdiskDownload\python3\练习.py ===============
您想要购买哪天的票?请输入正整数1-7:1
请输入需要购买大人的票数(张):2
请输入需要购买儿童的票数(张):1
总票价为: 250.0
>>>
=============== RESTART: D:\BaiduNetdiskDownload\python3\练习.py ===============
您想要购买哪天的票?请输入正整数1-7:7
请输入需要购买大人的票数(张):2
请输入需要购买儿童的票数(张):1
总票价为: 300.0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
魔法方法
- new:
new 是在一个对象实例化的时候所调用的第一个方法,在调用 init 初始化前,先调用 new 。
new 至少要有一个参数 cls ,代表要实例化的类,此参数在实例化时由 Python 解释器自动提供,后面的参数直接传递给 init 。
new 对当前类进行了实例化,并将实例返回,传给 init 的 self 。但是,执行了 new ,并不一定会进入 init ,只有 new 返回了,当前类 cls 的实例,当前类的 init 才会进入。
若 new 没有正确返回当前类 cls 的实例,那 init 是不会被调用的,即使是父类的实例也不行,将
没有 init 被调用
init:
init(self[, …]) 构造器,当一个实例被创建的时候调用的初始化方法
str:
str(self) :
当你打印一个对象的时候,触发 str
当你使用 %s 格式化的时候,触发 str
str 强转数据类型的时候,触发 str
str(self) 的返回结果可读性强。也就是说, str 的意义是得到便于人们阅读的信息
repr:
repr(self):
有 str 的时候执行 str ,没有实现 str 的时候,执行 repr
repr(obj) 内置函数对应的结果是 repr 的返回值
当你使用 %r 格式化的时候 触发 repr
repr(self) 的返回结果应更准确。怎么说, repr 存在的目的在于调试,便于开发者使用
getitem:
getitem(self, key) 定义获取容器中元素的行为,相当于 self[key]
setitem:
setitem(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value