python类和对象基础_类与对象基础操作

[TOC]

对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体。

### 定义类

* 在现实世界中,先有对象,再有类

* 在程序中,先定义(类),后使用类(用来产生对象)

在Python中程序中的类用class关键字定义,而在程序中特征用变量标识,技能用函数标识,因而类中最常见的无非是:变量和函数的定义

```

class student():

school='CECT'

def learn(self):

print('is learning')

def eat(self):

print('is eating')

def sleep(self):

print('is sleeping')

```

注意:

* 类中可以有任意python代码,这些代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过`student.__dict__`查看

* 类中定义的名字,都是类的属性,点是访问属性的语法。

### 直接操作类的属性

```

student.school #查

student.school='qh' #改

student.name=1 #增

del student.name #删

```

### 类实例化为对象

```

s1=student()

s2=student()

s3=student()

```

> 如此,实例化了三个对象s1、s2、s3,但现在这三者除属性相同,如果想让他们还有不同的熟悉,就要用到`__init__`来初始化

### `__init__`初始化

注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值

```

class student():

def __init__(self,name,age,sex):

self.name=name

self.age=age

self.sex=sex

......

s1=student('noah',28,'男')

print(s1.name,s1.age,s1.sex)

#结果:

noah 28 男

```

>也可以先调用类产生空对象s1,然后用`student.__init__(s1,'李坦克','男',18)`初始化

### 对象的使用

```

s1.name #查,等同于s1.__dict__['name']

s1.name='王三炮' #改,等同于s1.__dict__['name']='王三炮'

s1.course='python' #增,等同于s1.__dict__['course']='python'

del s1.course #删,等同于s1.__dict__.pop('course')

```

### 类的属性

类有两种属性:数据属性和函数属性

1、类的数据属性是所有对象共享的

~~~

#类的数据属性是所有对象共享的,id都一样

print(id(student.school))

print(id(s1.school)) #4377347328

print(id(s2.school)) #4377347328

print(id(s3.school)) #4377347328

~~~

2、类的函数数据是绑定给对象用的,称为绑定到对象的方法

~~~

#类的函数属性是绑定给对象使用的,obj.method称为绑定方法,内存地址都不一样

print(student.learn) #

print(s1.learn) #>

print(s2.learn) #>

print(s3.learn) #>

#ps:id是python的实现机制,并不能真实反映内存地址,如果有内存地址,还是以内存地址为准

~~~

### 属性查找顺序

属性查找顺序:先在对象自己的名称空间找,然后到类中找,再然后到父类中找,直到都找不到而抛出异常

注意下面的案例,属性查找并不是就近原则,而是一定先从对象的名称空间开始

```

class Foo:

def f1(self):

print('Foo.f1')

def f2(self):

print('Foo.f2')

self.f1()

class Bar(Foo):

def f1(self):

print('Bar.f1')

b=Bar()

b.f2()

# 打印结果:

Foo.f2

Bar.f1

```

### 绑定方法

类中定义的函数,主要是给对象使用的,是绑定到对象的.

~~~

class student:

school='CECT'

def __init__(self,name,sex,age):

self.name=name

self.age=age

self.sex=sex

def learn(self):

print('%s is learning' %self.name) #新增self.name

def eat(self):

print('%s is eating' %self.name)

def sleep(self):

print('%s is sleeping' %self.name)

s1=student('李坦克','男',18)

s2=student('王大炮','女',38)

s3=student('牛榴弹','男',78)

~~~

类中定义的函数是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数

~~~

student.learn(s1) #李坦克 is learning

student.learn(s2) #王大炮 is learning

student.learn(s3) #牛榴弹 is learning

~~~

强调:绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’本身当做第一个参数传给方法,即自动传值(方法`__init__`也是一样的道理)

~~~

s1.learn() #等同于student.learn(s1)

s2.learn() #等同于student.learn(s2)

s3.learn() #等同于student.learn(s3)

~~~

**注意:绑定到对象的方法的这种自动传值的特征,决定了在类中定义的函数都要默认写一个参数self,self可以是任意名字,但是约定俗成地写出self。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值