002--对象和类
Posted junsheep
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002--对象和类相关的知识,希望对你有一定的参考价值。
对象和类
对象是什么?
在面向对象编程中,对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法。
对象:类的实例
类是什么?
类即类别、种类,是面向对象设计最重要的概念。
类:一种对象,每个对象都属于特定的类。
问题1:先有类还是先有对象?
先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看
- 在现实世界中:肯定是先有对象,再有类
- 在程序中:务必保证先定义类,后产生对象
创建自定义类
在Python中程序中的类:
- 用class关键字定义
- 关键字首字母大写
- 特征用变量标识
- 技能用函数标识
因而类中最常见的无非是:变量和函数的定义
一个简单的示例:
class Person: def set_name(self,name): self.name=name def get_name(self): return self.name def greet(self): print("hello,world! I am {}".format(self.name)) #创建两个实例 foo=Person() bar=Person() foo.set_name("Lucy") bar.set_name("Jessie") foo.greet() bar.greet() #输出 hello,world! I am Lucy hello,world! I am Jessie
从上面示例不难看出:
- 该示例包含三个方法,他们类似于函数定义,位于class语句内。
- self指向对象本身,例如:对foo调用set_name和greet时,foo都会作为第一个参数自动传给他们。
实际上,可以随便给这个参数命名,但鉴于它总是指向对象本身,因此习惯上将其命名为self。
类的使用
class OldboyStudent: school=‘oldboy‘ def learn(self): print(‘is learning‘) def eat(self): print(‘is eating‘) def sleep(self): print(‘is sleeping‘)
1、引用类的属性
OldboyStudent.school #查 OldboyStudent.school=‘Oldboy‘ #改 OldboyStudent.x=1 #增 del OldboyStudent.x #删
2、调用类
- 或称为实例化,得到程序中的对象
s1=OldboyStudent() s2=OldboyStudent() s3=OldboyStudent() #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__
3、__init__方法
#注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值 class OldboyStudent: ...... def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex ...... s1=OldboyStudent(‘李坦克‘,‘男‘,18) #先调用类产生空对象s1,然后调用OldboyStudent.__init__(s1,‘李坦克‘,‘男‘,18) s2=OldboyStudent(‘王大炮‘,‘女‘,38) s3=OldboyStudent(‘牛榴弹‘,‘男‘,78)
对象的使用
1、查看对象的名称空间
- cls.__dict__
#执行__init__,s1.name=‘牛榴弹‘,很明显也会产生对象的名称空间可以用s2.__dict__查看,查看结果为 print(s2.__dict__) {‘name‘: ‘王大炮‘, ‘age‘: ‘女‘, ‘sex‘: 38}
2、对象的属性
s2.name #查,等同于s2.__dict__[‘name‘] s2.name=‘王三炮‘ #改,等同于s2.__dict__[‘name‘]=‘王三炮‘ s2.course=‘python‘ #增,等同于s2.__dict__[‘course‘]=‘python‘ del s2.course #删,等同于s2.__dict__.pop(‘course‘)
补充说明
- 站的角度不同,定义出的类是截然不同的;
- 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等;
- 有时为了编程需求,程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类
函数 V.S 方法
方法(关联方法)将其第一个参数关联到它所属的实例,因此无需提供这个参数。当然可以将属性关联到一个普通函数,但这样就没有特殊的self参数了
举个例子:
1、类属性关联到函数:
class Class:
def method(self):
print("I have a self")
def function():
print("I don‘t have self...")
instance=Class()
instance.method()
#输出结果
I have a self
instance.method=function
instance.method()
#输出结果
I don‘t have self...
注意:有没有参数self并不取决于instance.method的调用方法
2、让另一个变量指向同一个方法
class Class:
def method(self):
print("I have a self")
def function():
print("I don‘t have self...")
instance=Class()
ins=instance.method
ins()
#输出结果
I have a self
虽然最后一个方法调用起来看起来像函数调用,但变量ins指向的是关联的方法instance.method,这意味着它也能够访问参数self(即它也被关联到类的实例)
Mark on 2018.04.12
以上是关于002--对象和类的主要内容,如果未能解决你的问题,请参考以下文章