什么是对象
大白话
python中一切内容都可以成为对象,除了数字、字符串、列表、元组、字典、集合、range对象、zip对象等等,函数也属于对象,类也属于对象。
准确定义
由数据及其操作所构成的封装体,是系统中用来描述客观事物的一个模块,是构成系统的基本单位。用计算机语言来描述,对象是由一组属性和对这组属性进行的操作构成的。
类
定义
类是一个数据结构,类定义数据类型的数据 属性和行为(方法)。
实例对象是类的具体实体,称之为类的实例 (instance) 与类要区分开
python中,一切皆为对象,并有以下定义。
类称为类对象 (class object) 例如 int 。
类的实例称为实例对象(instance object)
注意定义类时,首字母必须大写。
实例对象
实例对象的创建
对象是类的实体,称之为类的实例。
语法
实例对象名 = 类名 (参数列表)
例子
Liuyang=Example( )
实例对象归属类的判定(isinstance函数)
class Example:
Body='强壮'
def infor(self):
print('示范作用')
liuyang=Example()
print(isinstance(liuyang,Example))
实例对象成员对象的访问
类的实例称为实例对象,创建后可以使用"."运算符调用其他成员,成员主要有:
实例对象的属性:描述实例对象状态的数据成员。
实例对象的方法:描述操作的函数成员。
实例对象成员访问方法:
object_name.对象方法或object_name.对象属性
实例
class Example:
Body='强壮'
def infor(self):
print('示范作用')
liuyang=Example()
print(isinstance(liuyang,Example))
print(liuyang.Body)
print(liuyang.infor())
参数self的使用
self是一个比较抽象的概念,一直以来对此概念有不清晰地方的朋友们可以借此机会好好看一下。
在方法列表中,第一个参数永远都是self(金科玉律,直接背过就可以了)
self指的就是对象本身。
当某个实例对象调用方法的时候,python解释器会把这个实例对象作为第一个参数传给self,开发者只需要传递后面的参数。
实例
class Example:
Body='强壮'
def infor(self):
print('示范作用')
def effect(self,career):
print(f'{career}的典范')
liuyang=Example()
print(liuyang.effect("学生"))
def setSpeed (s)
self.speed s
区分:方法与函数
函数需要手动输入self,方法不需要。
函数需要使用函数名去调用,方法使用对象名去调用。
两个对照例子
class Example:
Body='强壮'
def infor(self):
print('示范作用')
def effect(self,career):
print(f'{career}的典范')
liuyang=Example()
print(liuyang.effect("学生")) #方法调用
def effect(self):
print(f"{self}是好干部")
print(effect("焦裕禄")) #函数调用
函数转换为方法
def setSpeed (s)
self.speed=s
import types
#动态增加成员方法
car1.setSpeed=types.MethodType(setSpeed,car1)car1.setSpeed(50)
#调用成员方法
print(car1.speed)
对象的属性
类的数据成员是在类中定义的成员变量,用来存储描述类的特征的值,称之为属性。
属性实际上是在类中定义的变量。
属性可以被该类中定义的方法访问,也可以通过类对象或实例对象进行访问。
有关__init__函数的解释
class来定义类,类又包含了属性、方法等,属性是类里面的变量,方法是类里面的函数
而__init__就是其中一种函数,叫做构造函数。
每次创建类的实例对象时,__init__函数就会自动被调用(和C++里面的构造函数没有什么本质区别),无论它里面有什么样的变量、计算,统统会自动调用。
class Box:
#def setDimension(self, width, height, depth):
# self.width = width
# self.height = height
# self.depth = depth
def __init__(self, width, height, depth):
self.width = width
self.height = height
self.depth = depth
def getVolume(self):
return self.width * self.height * self.depth
b = Box(10, 20, 30)
print(b.getVolume())
上述代码采用了两种方法写了构造函数,其中setdimension与__init__含义是完全相同的。
理解__init__函数需要搞清楚以下三点:
1.带有 两个下划线开头的函数是声明该属性为私有,不能在类地外部被使用或直接访问。
2.init函数(方法)支持带参数的类的初始化 ,也可为声明该类的属性
3.init函数(方法)的第一个参数必须是 self(self为习惯用法,也可以用别的名字),后续参数则可以自由指定,和定义函数没有任何区别。
构造方法__init__用于创建实例对象时使用,每当创建一个类的实例对象时,Python解释器都会自动调用它,用来初始化对象的某些属性。
实例对象属性的构造
通过“ self. 变量名”定义的属性称为实例对象的属性或变量,实例对象的属性在类的内部通过 self 访问,在外部通过对象实例访问。
初始化:实例对象属性一般在 __init__() 方法中通过如下形式:
类内部访问:通过self访问
self.实例变量名 #读取
self.实例变量名=值 #写入
创建实例后访问:
对象名.实例对象名 #读取
对象名.实例对象名=值 #写入
私有属性
通常约定以两个下划线“__”开头但不以两个下划线为结束的属性成为私有属性。
其他的成为公有属性。不能直接访问私有属性,但可在方法中访问。
class person2:
career='运动员'
def __init__(self,grade1,age1):
self.grade=grade1
self.age= age1
def get_grade(self):
return self.grade
__identity='间谍'
def get_identity(self):
return self.__identity
a=person2(95,21)
print(a.__identity)
使用上述方式直接调用私有数据会导致报错,权限问题。
使用函数读取私有数据即可(这一点和c++完全类似)
class person2:
career='运动员'
def __init__(self,grade1,age1):
self.grade=grade1
self.age= age1
def get_grade(self):
return self.grade
__identity='间谍'
def get_identity(self):
return self.__identity
a=person2(95,21)
print(a.get_identity())