面向对象
python学习记录
面向对象
自定义类型
1.类型里定义的变量,所有对象共享
2.类型里定义的变量,需要通过类型修改,不是变量
class Good():
#类型的变量
price = 8.88
def label(self):
#函数的变量
#self代表类实例化后的对象
#如果对象没有属性,则取类属性
# self.price = 9.99
print("我是商品")
#类型是class
print(Good)
#对象就是类的实例化
good1 = Good()
#实例化后的类 类型是object
print(good1)
#实例化后的类可以调用类里定义的函数
#我们称它为对象的属性
good1.label()
#
print(good1.price)
good1.price = 7.77
调用父类方法
super 调用父类的方法
class Person():
def __init__(self, skin, sex, age):
self.skin = skin
self.sex = sex
self.age = age
def __repr__(self):
return "我是{0}人,{1}性, {2}岁".format(self.skin, self.sex, self.age)
def talk(self,msg):
print(msg)
class White(Person):
#super函数一般用于父类函数__init__的初始化
def __init__(self,sex,age):
super(White,self).__init__("白",sex,age)
#在子类里重写方法
def talk(self,msg):
super(White,self).talk("这里是super函数调用的talk")
print("我是个白人,我很高傲.", msg)
class Black(Person):
pass
white = White( "男", 19)
print(white)
white.talk("我很棒")
black = Black("黑", "女", 20)
print(black)
black.talk("i'm good")
绑定
绑定主要是两个修饰器
@classmethod和@staticmethod
第一个是绑定方法到类上,第二个是哪里都不绑定
class Person():
age = 10
def __init__(self, age):
self.age = age
def display_age(self):
print(self.age)
#修饰器,表示这个方法是属于类的
@classmethod
def display_class_age(cls):
print(cls.age)
#staticmethod的作用是使方法不属于类,也不属于对象,全局
#效果相当于在类外边定义了一个方法
#为什么不能直接写在类外边,因为面向对象的编程方法不建议在类外边定义函数
@staticmethod
def display(age):
print(age)
p1 = Person(18)
p1.display_age()
#TypeError: display_age() missing 1 required positional argument: 'self'
#因为display_age这个方法是绑定到了对象上,而没有绑定到类上
#Person.display_age()
Person.display_class_age()
p1.display_class_age()
Person.display(25)
p1.display(30)
继承和组合
组合
#一辆车,由发动机和车轮组成
class Engnie():
pass
class Wheel():
pass
class Car():
def __init__(self):
self.engine = Engnie()
self.wheel = Wheel()
ord 查看字符的十进制值 chr 查看十进制数字对应的字符
print(ord("a")) #去ASCII码表查 a对应的十进制是97
print(chr("97")) #去ASCII码表查 十进制97对应的解释是小写字母a
文件操作(flag:此篇简单记录,后续详细写一篇文件操作博)
#open函数--打开文件
#"r"=read(读)指定文件打开方式
#encoding指定文件编码
f = open("python.py","r",encoding="utf-8")
#read函数读取内容
print(f.read())
#文件打开后一定记得关闭 否则容易泄露
f.close()
#写文件
#指定的文件存在则直接写入,指定的文件不存在,则在此目录下先创建文件再写入
#input:在命令行输入
i = input("请输入你想写入hello.txt中的内容:")
f = open("hello.txt","w",encoding="utf-8")
f.write(i)
f.close()
输入,字符串格式化
1.format
name = input("what't your name?")
age = input("how old are you?")
print("hi {0},你的年龄是{1}吗?".format(name,age))
2.%s
name = input("what't your name?")
age = input("how old are you?")
print("hi %s,你的年龄是%s吗?"%(name,age))
input输入的内容,默认都是字符串,可以使用type()函数查看数据类型
name = input("what't your name?")
print(type(name))
结果是str字符串类型
如果输入的字符串类型不便于使用,则可强制转换数据类型
age = int(input("how old are you?"))
print(type(age))
此时的结果就是int
p.s. 字符串和字符串可以相加
print("break" + "first")
breakfirst
条件if(分支语句)
例1:比大小
#引入random库
import random
#随机生成一个int类型在指定范围内的数字
a = random.randint(0,10)
b = int(input("请说出一个0~10之间你想的数字: "))
if a > b :
print("你说小了,我的是{0},你的是{1}".format(a,b))
elif a < b :
print("你说大了,我的是{0},你的是{1}".format(a, b))
else:
print("好巧!你是{0},我也是{1}".format(b,a))
例2:学生成绩分级
student_score = random.randint(0,100)
if student_score >= 90:
print("这位同学的分数是%d,成绩是A"%student_score)
elif 89 >= student_score >= 60:
print("这位同学的分数是%d,成绩是B"%student_score)
else:
print("这位同学的分数是%d,成绩是C"%student_score)
只有在关键字后的语句(表达式)为True时,才执行这个分支的代码。那么什么是True什么是False呢?
#查看一个表达式是True还是False
print(bool())
经过尝试就会得到,False,None,0,’’,(),{},[]等所有空的都是False
while循环
当while后的条件成立,循环会一直执行,直到break
import random
a = random.randint(0,10)
while True:
b = int(input("请说出一个0~10之间你想的数字,我们来比一比: "))
if a > b :
print("你说小了")
elif a < b :
print("你说大了")
else:
print("好巧!你是{0},我也是{1}".format(b,a))
break
输出结果:
请说出一个0~10之间你想的数字,我们来比一比: 6
你说小了
请说出一个0~10之间你想的数字,我们来比一比: 7
你说小了
请说出一个0~10之间你想的数字,我们来比一比: 8
好巧!你是8,我也是8
猜对时,停止循环,继续执行下边的代码
若想继续循环,可使用continue
import random
a = random.randint(0,10)
while True:
b = int(input("请说出一个0~10之间你想的数字,我们来比一比: "))
if a > b :
print("你说小了")
elif a < b :
print("你说大了")
else:
print("好巧!你是{0},我也是{1}".format(b,a))
continue
输出结果:只是跳出了本次循环,大循环不会结束,猜对了也会一直循环下去
请说出一个0~10之间你想的数字,我们来比一比: 5
好巧!你是5,我也是5
请说出一个0~10之间你想的数字,我们来比一比: 5
好巧!你是5,我也是5
请说出一个0~10之间你想的数字,我们来比一比: 5
好巧!你是5,我也是5
请说出一个0~10之间你想的数字,我们来比一比:
for循环
for循环是可以指定次数的循环
例如:输出0~10之间的所有偶数
for i in range(11): #range函数有头无尾,只填一个数默认从0开始
if i % 2 == 0:
print(i)
continue
例如:上边的栗子比大小,指定循环次数为3,并在最后一次机会时告诉参与者
import random
a = random.randint(0,10)
for i in range(3):
if i == 2:
print("这是最后一次机会!!!")
b = int(input("请说出一个0~10之间你想的数字,我们来比一比: "))
if a > b :
print("你说小了")
elif a < b :
print("你说大了")
else:
print("好巧!你是{0},我也是{1}".format(b,a))
break
输出结果:参加3次后循环结束
请说出一个0~10之间你想的数字,我们来比一比: 6
你说小了
请说出一个0~10之间你想的数字,我们来比一比: 6
你说小了
这是最后一次机会!!!
请说出一个0~10之间你想的数字,我们来比一比: 6
你说小了
作业
1.四个数字1、2、3、4,可以组成所少互不相同且无重复数字的三位数
2.有一分数序列,2/1,3/2,5/3,8/5…求出这个数列的前20项之和
3.输入字符串,判断是否为回文