Python 第十四天学习笔记
今天去面试数据分析师,遇见的是本科北交大硕士中科院学工业工程的同学。真的是压力山大。
面试被问到了SQL。最近都不要投简历关注实习了,先充电,学完Python再学SQL。
今天做第十一章类和对象的习题
0.对象中的属性和方法,在编程中实际是什么?
变量属性,函数方法
1.类和对象是什么关系?
对象是类的实例化,类是抽象的,对象是具体的
2.如果我们定义了一个猫类,那你能想象出“猫”类实例化的对象有哪些?
叮当猫,咖啡猫等
3.类的定义有时候或许不那么“拟物”,有时候会抽象一些,例如我们定义一个矩阵类,那你会为此添加哪些属性和方法?
属性:长和宽垂直,长和宽是直线
方法:计算周长,面积
4.类的属性定义应该尽可能抽象还是尽可能具体?
应该尽可能抽象
5.请用一句话概括面向对象的几个特征
封装:对外部隐藏对象的工作细节
继承:子类可以共享父类之间数据和方法的机制
多态:可以对不同类的对象调用相同的方法,产生不同的结果
6.函数和方法有什么区别
方法和函数几乎是一样的,但是方法默认有一个self参数
0.按照以下提示尝试定义一个Person类并生成实例对象
属性:姓名(默认小甲鱼)
方法:打印姓名
class Person:
name = "小甲鱼"
def printName(self):
print(self.name)
>>> tt=Person()
>>> tt.name
'小甲鱼'
1.按照以下提示尝试定义一个矩形类并生成实例对象
属性:长和宽
方法:设置长和宽 setRect(self) 获得长和宽 grtRect(self) 获得面积 getArea(self)
class Rect():
length = 5
width = 4
def setRect(self):
print("请输入长和宽")
self.length = float(input("长:"))
self.width = float(input("宽:"))
def getArea(self):
return self.length*self.width
第37课
2.self 参数的作用是什么?
绑定方法,据说有了这个参数,Python再也不会傻傻分不清是哪个对象在调用方法了,可以认为方法中的self其实就是实例对象的唯一标志
3.类在实例化后哪个方法会被自动调用
__init__会被自动调用
4.请解释下边代码报错的原因:
定义完类后,就是类对象,即实例化,只有实例化后才能通过self参数进行调用
上图所示乜有实例化就直接调用,缺少self参数,所以会报错
0.按照以下要求定义一个游乐园门票的类,并尝试计算2个成文+1个小孩平日票价
平日票价100元,周末票价为平日的120%,儿童半票
class Ticket:
def __init__(self,weekend=False,child=False):
self.a = 100
if weekend:
self.discount1 = 1.2
else:
self.discount1 = 1
if child:
self.discount2 = 0.5
else:
self.discount2 = 1
def price(self,num):
return self.a * self.discount1 * self.discount2 * num 不会报错,下图第一种
print( self.a * self.discount1 * self.discount2 * num) 会报错,下图第二种
import random as r
legal_x = [0,10]
legal_y = [0,10]
class Gui:
def __init__(self):
self.power = 100
self.x = r.randint(0,10)
self.y = r.randint(0,10)
def move(self):
new_x = self.x + r.choice([1,2,-1,-2])
new_y = self.y + r.choice([1,2,-1,-2])
if new_x < 0:
self.x = -new_x
elif new_x > 10:
self.x = new_x - (new_x - 10)
else:
self.x = new_x
if new_y < 0:
self.y = -new_y
elif self.y >10:
self.y = new_y - (new_y - 10)
else:
self.y = new_y
self.power -= 1
return (self.x,self.y)
def eat(self):
self.power += 20
if self.power > 100:
self.power = 100
class Fish:
def __init__(self):
self.x = r.randint(0,10)
self.y = r.randint(0,10)
def move(self):
new_x = self.x + r.choice([1,-1])
new_y = self.y + r.choice([1,-1])
if new_x < 0:
self.x = - new_x
elif new_x >10:
self.x = new_x - 2
else:
self.x = new_x
if new_y <0:
self.y = -new_y
elif new_y > 10:
self.y = new_y - 2
else:
self.y = new_y
return(self.x,self.y)
while True:
if not len(fish):
print("鱼儿吃完了,游戏结束")
break
if not gui.power:
print("乌龟体力耗尽,游戏结束")
break
pos = gui.move()
for each_fish in fish[:]:
gui.eat()
fish.remove(each_fish)
print("有一条鱼儿被吃掉了")
第38课:
class A():
def __init__(self):
print("进入A")
print("离开A")
class B(A):
def __init__(self):
print("进入B")
A.__init__(self)
print("离开B")
class C(A):
def __init__(self):
print("进入C")
A.__init__(self)
print("离开C")
class D(B,C):
def __init__(self):
print("进入D")
B.__init__(self)
C.__init__(self)
print("离开D")
结果是:
>>> d=D()
进入D
进入B
进入A
离开A
离开B
进入C
进入A
离开A
离开C
离开D
进入D,进入B,进入A,离开A,离开B,进入C,进入A,离开A,离开C,离开D
用super函数改进
class A:
def __init__(self):print("进入A")
print("离开A")
class B(A):
def __init__(self):
print("进入B")
super().__init__()
print("离开B")
class C(A):
def __init__(self):
print("进入C")
super().__init__()
print("离开C")
class D(B,C):
def __init__(self):
print("进入D")
super().__init__()
print("离开D")
>>> d=D()
进入D
进入B
进入C
进入A
离开A
离开C
离开B
离开D
中间这步很重要,起到调用作用,省去之后就没有调用
import math
class Point:
def __init__(self,x=0,y=0):
self.x = x
self.y = y
def getx(self):
return self.x
def gety(self):
return self.y
class Line:
def __init__(self,p1,p2):
self.x = p1.getx() - p2.getx()
self.y = p1.gety() - p2.gety()
self.len = math.sqrt(self.x**2 + self.y**2)
def getlen(self):
return self.len
第39课
下次看183页
争取在下周学完爬虫。时间不够就10天内。
然后学习SQL。