python面向对象

1 面向对象程序设计的相关概念

  1. 对象:将一组数据和对这组数据的相关操作组装在一起的实体。
  2. 类:具有相同或相似性质的对象的抽象,类是对象的抽象,对象是类的具体化
  3. 封装:定义一个类,将数据和操作捆绑在一起
  4. 继承:类和类的关系,一个类共享其他类的定义和行为
  5. 方法:成员函数
  6. 构造函数:初始化对象需要的函数,与类同名
  7. 析构函数:对象脱离其作用域时,即对象所在的函数调用完毕所执行的方法,清理善后工作。

2 类的定义

2.1类的基本结构

class Person:     
	def say_hello(self):
		print('hello')

注意:

  1. 类的命名一般以大写字母开头
  2. 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静态变量

  1. 静态变量属于类,与具体的对象无关,任何公有变量可以当做静态变量使用
  2. 通过类名访问和对象访问的静态变量不同

2.5静态方法

  1. 静态方法无需要传入self参数,因此静态方法中无法访问私有变量
  2. 静态方法不可以直接访问类的静态变量,但是可以通过类名访问。
  3. 静态方法类似函数工具库,无法访问直接访问类的静态变量,和实例变量,与定义的类无关系。
class Myclass:
    str='aaaa'
    @staticmethod
    def static():
        print(Myclass.str)# 直接str时无法访问
Myclass.static()
c=Myclass()
c.static()

2.6 isinstance()函数判断类

isinstance(对象名,类名)是返回true 否则返回false

3 类的继承和多态

  1. 继承,子类可以继承父类的方法和属性。
  2. 抽象类,包含抽象方法的类,抽象方法不实现。留给子类实现。

定义抽象类通过类库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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值