- 类class
面向对象的程序设计中的一种数据结构,内部包括数据(属性)和函数(对属性进行操作)。
面向对象的程序设计三个特性:封装、继承和多态,是基于类和对象的操作。
注意类的定义格式,每个类都包括一个初始化函数(构造函数)来初始化数据。
注意:类中定义的每一个函数都有一个默认参数self(用于封装),且必须为第一个参数.
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def greet(self):
print("Hello, my name is %s" % self.name)
a=Person("Peter",20)
b=Person("Anna",19)
a.greet()
print(b.age)
Hello, my name is Peter
19
定义一个矩形类,矩形的位置由对角线两个点确定。
计算矩形的长和宽,面积和周长,显示矩形对角线两个点的位置
注意:__init__()函数为构造函数为对象分配存储空间,__str__()函数返回一个字符串,用于对象的输出。
import math
class Rectangle():
def __init__(self,coor1,coor2):
self.coor1x=coor1[0]
self.coor1y=coor1[1]
self.coor2x=coor2[0]
self.coor2y=coor2[1]
def width(self):
return math.fabs(self.coor1x-self.coor2x)
def height(self):
return math.fabs(self.coor1y-self.coor2y)
def area(self):
return math.fabs(self.coor1x-self.coor2x)*math.fabs(self.coor1y-self.coor2y)
def circumference(self):
return (math.fabs(self.coor1x-self.coor2x)+math.fabs(self.coor1y-self.coor2y))*2
def __str__(self):
ls1=str((self.coor1x,self.coor1y))
ls2=str((self.coor2x,self.coor2y))
ls=ls1+ls2
return ls
a=Rectangle((1,2),(3,4))
print(a.width())
print(a.area())
print(a)
2.0
4.0
(1, 2)(3, 4)
- 类的继承
子类继承父类的数据和函数,子类生成的对象可以访问父类。访问顺序:先子类,再上溯到父类。
注意子类的定义格式
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def greet(self):
print("Hello, my name is %s" % self.name)
class TenYearOldPerson(Person):
def __init__(self,name):
super().__init__(name,10)
def greet(self):
print("I don't talk to strangers!")
a=TenYearOldPerson("Peter")
a.greet()
b=Person("Mary",19)
b.greet()
I don't talk to strangers!
Hello, my name is Mary
定义一个正方形类,作为矩形的子类,通过调用父类的函数计算面积等。
import math
class Rectangle():
def __init__(self,coor1,coor2):
self.coor1x=coor1[0]
self.coor1y=coor1[1]
self.coor2x=coor2[0]
self.coor2y=coor2[1]
def width(self):
return math.fabs(self.coor1x-self.coor2x)
def height(self):
return math.fabs(self.coor1y-self.coor2y)
def area(self):
return math.fabs(self.coor1x-self.coor2x)*math.fabs(self.coor1y-self.coor2y)
def circumference(self):
return (math.fabs(self.coor1x-self.coor2x)+math.fabs(self.coor1y-self.coor2y))*2
def __str__(self):
ls1=str((self.coor1x,self.coor1y))
ls2=str((self.coor2x,self.coor2y))
ls=ls1+ls2
return ls
class Square(Rectangle):
def __init__(self,coor1,size):
coor2=(coor1[0]+size,coor1[1]+size)
super().__init__(coor1,coor2)
self.size=size
a=Square((1,1),1)
b=Square((2,2),1)
print(a.area())
print(b.circumference())
print(b)
1.0
4.0
(2, 2)(3, 3)