1.类:抽象的,包括属性和方法,比如矩形类,属性可以是长宽,方法(也就是函数)可以是计算面积周长。
2.按照以下提示尝试定义一个Person类并生成实例对象。
属性:姓名(默认姓名为“小甲鱼”)
方法:打印姓名
提示:方法中对属性的引用形式需加上self,如self.name
class Person:
name = '小甲鱼'#属性
def printt(self):#方法
print(self.name)#方法中对属性的引用
a = Person()
a.printt()
3.按照以下提示尝试定义一个矩形类并生成类实例对象。
属性:长和宽
方法:设置长和宽 -> setRect(self),获得长和宽 -> getRect(self),获得面积 -> getArea(self)
提示:方法中对属性的引用形式需加上self,如self.width
class juxing:
chang = 4
kuan = 2
def setRect(self):
self.chang = int(input('请输入长:'))
self.kuan = int(input('请输入宽:'))
def getRect(self):
print('矩形的长为:%d,宽为:%d'%(self.chang,self.kuan))
def getArea(self):
s = self.chang * self.kuan
print('矩形的面积为:',s)
m = juxing()
m.setRect()
m.getArea()
m.getRect()
4.self参数的作用:self指向的是类的实例化对象,使得程序能够判断是哪个对象在调用方法。
5.不希望对象的属性和方法被外部直接引用时,可以在名字前加入双下划线,例如:__name。
6.__init __方法会在类实例化时被自动调用,相当于对对象的初始化,是一种魔法方法,可重写,不应该返回除了none以外的任何对象。
7.明确类,类对象,类的实例化对象
在建立类时就生成了一个类对象,此对象可以调用类的属性,不可以直接调用类的方法,实例化对象才可以调用方法。
8.按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价。
平日票价100元
周末票价为平日的120%
儿童半票
class Ticket:
def __init__(self, weekend=False, child=False):#初始化设置
self.price = 100
self.increase = 1
self.discount = 1
if weekend:
self.increase = 1.2
if child:
self.discount = 0.5
def Price(self, num):
return self.price * self.increase * self.discount * num
adult = Ticket()
child = Ticket(child=True)
print("2个大人 + 1个小孩平日票价为:%.2f元" % (adult.Price(2) + child.Price(1)))
9.super()函数:
在类的继承中,如果重新定义了某个方法,则这个方法将会覆盖父类的同名方法,当想同时实现子类和父类的这一方法时,可以使用两种方法,一个是:直接调用未绑定的父类方法;一个是:使用super()函数。
调用未绑定的父类方法,但是在多重继承中会出现问题。
class B:
def ss(self):
pass
class A(B):
def ss(self):
B.ss(self) #调用父类方法
pass
使用super()函数,常用于多重继承。
class B:
def ss(self):
pass
class A(B):
def ss(self):
super(A,self).ss() #先找到类A的父类B,然后将类A的对象转化为类B的对象,最后调用ss方法。
#也可以直接super().ss()#python3写法
pass
一般,super()函数最常见的方法就是在子类中调用父类的初始化方法。
class B:
def __init__(self, a, b):
self.a = a
self.b = b
class A(B):
def __init__(self, a, b, c):
super().__init__(a, b)
self.c = c
10.多态,一个事物的多种状态,在python中让具有不同功能的函数使用相同的函数名,从而可以用一个函数名调用不同功能的函数。
11.定义一个点(Point)类和直线(Line)类,使用getLen方法可以获得直线的长度。
提示:
1.设点A(X1,Y1)、B(X2,Y2)
2.Python中计算开根号可使用math模块中的sqrt函数
3.直线需有两点构成,因此初始化时需要有两个点(Point)对象作为参数
import math as m
class point():
def __init__(self, x, y):#设置x,y
self.x = x
self.y = y
def getx(self):#获得x,y
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()
def getLen(self):
self.len = m.sqrt(self.x**2+ self.y**2)
print('%.2f'%self.len)
p1 = point(3, 1)
p2 = point(1, 4)
line = line(p1, p2)
line.getLen()
11.组合:在类定义中直接把需要的类放进去实例化。
class Turtle:
pass
class Fish:
pass
class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x) # 直接把需要的类放进去实例化
self.fish = Fish(y)
12.请动手在一个类中定义一个变量,用于跟踪类有多少个实例被创建(当实例化一个对象,这个变量+1,当销毁一个对象,这个变量自动-1)。
类属性通常用来跟踪与类相关的值。
class C:
count = 0#类属性
def __init__(self):#自动调用进行初始化
C.count += 1
def __del__(self):
C.count -= 1