python面向对象编程实例-Python 面向对象编程——类和实例

1面向对象编程

面向对象编程:

面向对象编程——Object OrientedProgramming

OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

所有的数据类型可以视为对象,当然也可自定义对象,自定义的对象数据类型就是面向对象中的类(class)的概念。

涉及到类,自然想到实例,类是数据类型的抽象,而实例是类的具体(个人理解)。

>>> std1 = { "name": "Michael","score": 98 }

>>> std2 = { "name": "Bob","score": 81 }

>>>

>>> def print_score(std): --打印学生的姓名和成绩

... print("%s: %s" % (std["name"], std["score"]))

...

>>> print_score(std1)

Michael: 98

>>> print_score(std2)

Bob: 81

根据面向对象的程序设计思想,这个student应该被视为对象,抽象成类;

>>> classStudent(object): --定义类

... def __init__(self, name, score):

... self.name = name

... self.score = score

... def print_score(self): --定义方法

... print("%s: %s" % (self.name, self.score))

...

>>> bart = Student("Bart Simpson",59)

>>> lisa = Student("Lisa Simpson",87)

>>> bart.print_score() --调用对象的方法,一个具体的对象——实例

Bart Simpson: 59

>>> lisa.print_score()

Lisa Simpson: 87

面向对象的设计思想是抽象出Class,根据Class创建Instance。

1.1类和实例

1.1.1类和实例

>>> class Student(object): --class定义类的关键字,Student类名(大写开头),(object)表示从哪个类继承下来的

... pass

...

>>> Student

>>> bart = Student() --根据类创建实例

>>> bart

<__main__.Student object at0x2b7d2fd759e8>

如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

可以自由地给一个实例变量绑定属性,比如,给实例bart绑定一个name属性:

>>> bart.name = "Bart Simpson"

>>> bart.name

"Bart Simpson"

由于类起到的是模板的作用,创建类时,可以把必须绑定的属性强制填写进去—通过init方法

>>> class Student(object):

... def __init__(self, name,score): --init方法,init的第一个参数永远是self

... self.name = name

... self.score = score

...

在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。

存在init方法,创建实例时,必须填入指定参数,但self不需要传入,Python自己填入。

>>> bart = Student("DAIDAI", 99) --必须填入指定参数,强制性

>>> bart.name --name,score成为对象的属性

"DAIDAI"

>>> bart.score

99

>>> bart.self --不能这么指定self

Traceback (most recent call last):

File "", line 1, in

AttributeError: "Student" object has noattribute "self"

>>> bart.grade = "A" --新增属性grade

>>> bart.grade

"A"

类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。

1.1.2数据封装

>>> class Student(object):

... def __init__(self, name, score):

... self.name = name

... self.score = score

... def print_score(self): -- print_score方法

... print("%s: %s" % (self.name, self.score))

... def get_grade(self): --get_grade 方法

... if self.score >= 90:

... print("A")

... elif self.score >= 70:

... print("B")

... else:

... print("C")

...

定义方法,第一个参数是self,其他和函数一致。

>>> daidai = Student("DAIDAI", 99)

>>> daidai.print_score() --实例变量上的调用

DAIDAI: 99

>>> daidai.get_grade()

A

以上便是实现类的定义和其方法的定义,实现了类的封装。

方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据。

Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同。

>>> daidai.age = 8

>>> daidai.age

8

>>> xiongxiong.age --这个实例变量并未绑定

Traceback (most recent call last):

File "", line 1, in

AttributeError: "Student" object has noattribute "age"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值