文章目录
1 面向对象程序设计的相关概念
- 对象:将一组数据和对这组数据的相关操作组装在一起的实体。
- 类:具有相同或相似性质的对象的抽象,类是对象的抽象,对象是类的具体化
- 封装:定义一个类,将数据和操作捆绑在一起
- 继承:类和类的关系,一个类共享其他类的定义和行为
- 方法:成员函数
- 构造函数:初始化对象需要的函数,与类同名
- 析构函数:对象脱离其作用域时,即对象所在的函数调用完毕所执行的方法,清理善后工作。
2 类的定义
2.1类的基本结构
class Person:
def say_hello(self):
print('hello')
注意:
- 类的命名一般以大写字母开头
- self是必须的形参,代表对象本身
2.2 成员变量
- _xxx_表示系统定义的名字
- _xxx表示类中私有变量名,其他变量全是公有变量
class Mystring():
_str='Mystring'
def output(self):
print(self.str)
s=Mystring()
s.output()
2.3构造函数和析构函数
- 构造函数有固定的名称为__init__()以两个下划线开头,两个下划线结束,创建对象时自动调用。一般用构造函数设置私有变量的值
- 析构函数固定的名称为__del__()以两个下划线开头,两个下划线结束,删除对象时自动调用。
del s 表示用del删除s对象
2.4静态变量
- 静态变量属于类,与具体的对象无关,任何公有变量可以当做静态变量使用
- 通过类名访问和对象访问的静态变量不同
2.5静态方法
- 静态方法无需要传入self参数,因此静态方法中无法访问私有变量
- 静态方法不可以直接访问类的静态变量,但是可以通过类名访问。
- 静态方法类似函数工具库,无法访问直接访问类的静态变量,和实例变量,与定义的类无关系。
class Myclass:
str='aaaa'
@staticmethod
def static():
print(Myclass.str)# 直接str时无法访问
Myclass.static()
c=Myclass()
c.static()
2.6 isinstance()函数判断类
isinstance(对象名,类名)是返回true 否则返回false
3 类的继承和多态
- 继承,子类可以继承父类的方法和属性。
- 抽象类,包含抽象方法的类,抽象方法不实现。留给子类实现。
定义抽象类通过类库abc,中的ABCMeta,abstractmethod
from abc import ABCMeta,abstractmethod ( Metaclass for Abstruct Based Class)
类定义中加上如下代码:
mataclass=ABCMata
抽象方法中加入如下代码
@abstractmethod
例子
from abc import ABCMeta,abstractmethod
class shape(object): #继承超类
__metaclass__=ABCMeta #指明十个抽象类
def __init__(self):
self.color='black'
@abstractmethod #指明是抽象方法
def draw(self):pass
class circle(shape): #继承shape类
def __init__(self,x,y,r):
self.x=x
self.y=y
self.r=r
def draw(self):
print('圆形的信息为',self.x,self.y,self.r)
class line(shape): #继承shape类
def __init__(self,x1,y1,x2,y2):
self.x1=x1
self.x2=x2
self.y1=y1
self.y2=y2
def draw(self):
print('直线的信息为',self.x1,self.x2,self.y1,self.y2)
c=circle(10,10,5)
c.draw()
l=line(10,10,20,20)
l.draw()
4 对象复制
4.1通过赋值复制对象
方法为:
新对象=原有对象
接3代码
newcircle=c
newcircle.draw()
结果与原对象完全相同
4.2 通过函数参数复制对象
def drawcircle(c)
if isinstance(c,circle)
c.draw()
5928

被折叠的 条评论
为什么被折叠?



