python-类和对象关系及对象创建过程

python笔记 专栏收录该内容
21 篇文章 0 订阅

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的

面向对象技术简介

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类由 类名 属性 方法 构成
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

__init__方法

类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用(类的对象被实例化后运行)
即初始化方法:

__new__方法

new方法在类对象创建时被调用 new方法需要传入一给cls类 并且必须有返回值,返回一个实例化对象,即后面的self。
new 通常用于控制生成一个新实例的过程。它是类级别的方法。
new至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
new必须要有返回值,返回实例化出来的实例,这点在自己实现new时要特别注意,可以return父类new出来的实例,

new方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass。
具体我们可以用int来作为一个例子:
假如我们需要一个永远都是正数的整数类型:
def new(cls, value):
return super(PositiveInteger, cls).new(cls, abs(value))

self

self代表类的实例,而非类

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。
self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:

修改类属性:

方法1:直接修改属性的值
方法2:通过方法修改属性的值
方法3:通过方法对属性的值进行递减/增

保护属性和私有属性:

_foo:以单下划线开头的表示protected(保护)类型的成员,只允许类本身和子类进行访问,但在模板中直接定义的时候不允许通过from module import * 语句导入,但是可以通过导入整个模板进行导入。
保护属性主要作用与导入阶段,无法直接导入此属性,必须要将整个module导入才能使用此属性

Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了
声明该方法为私有方法,不能在类的外部调
如果有一个对象,当需要对其进行修改属性时,有2种方法
对象名.属性名 = 数据 ---->直接修改
对象名.方法名() ---->间接修改
为了更好的保存属性安全,即不能随意修改,一般的处理方式为
将属性定义为私有属性
添加一个可以调用的方法,供调用用

类的三大特性–封装 继承 多态:

封装:本质是将事物相关的属性和方法封装在一个类里面,我们调用类创建实例的时候,不用关心类内部的代码细节
继承:子类需要复用父类里面的属性或者方法,当然子类也可以提供自己的属性和方法
注意 父类的私有属性能被子类继承 但是无法直接通过子类访问,
可以通过在父类中定义访问的方法来访问

多态:同一个方法不同对象调用同一个方法功能的表现形式不一样,例如:a、不同的两个对象,字符串的加法和整数的加法,同样是加法,实现的功能是不一样的

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值