78.实例属性和实例方法
实例属性
实例属性是从属于实例对象(创建的饼干)
的属性,也称为“实例变量”
。他的使用有如下几个要点:
- 实例属性一般在
__init__()
方法中通过如下代码定义:self.实例属性名 = 初始值
- 在本类的其他实例方法中,也是通过self 进行访问:
self.实例属性名
- 创建实例对象后,通过实例对象访问:
obj01 = 类名()
# 创建对象,调用__init__()
初始化属性obj01.实例属性名 = 值
# 可以给已有属性赋值,也可以新加属性
实例方法
79.实例方法
实例方法是从属于实例对象的方法
。实例方法的定义格式如下:
def 方法名(self [, 形参列表]):
函数体
方法的调用格式如下:
对象.方法名([实参列表])
要点:
定义实例方法时
,第一个参数必须为self
。和前面一样,self 指当前的实例对象。- 调用实例方法时,
不需要也不能给self 传参
。self 由解释器自动传参。
函数和方法的区别
- 都是用来完成一个功能的语句块,本质一样。 2. 方法调用时,通过对象来调用。方法从属于特定实例对象,普通函数没有这个特点。 3. 直观上看,方法定义时需要传递self,函数不需要。
实例对象的方法调用本质:
其他操作:
dir(obj)
可以获得对象的所有属性、方法obj.__dict__
对象的属性字典 ,返回的是我们自己定义的属性。- ·pass· 空语句
isinstance
(对象,类型) 判断“对象”是不是“指定类型”(更推荐使用此方法而不是type
)
依然是这个例子 。
再看会有新的理解。
# 创建一个类
class Student: # 类名 一般首字母大写 ,多个单词用驼峰原则
def __init__(self, name, score): # 方法,也就是函数
self.name = name # self 必须在 第一个
self.score = score # 这是 构造方法
def say_score(self): # self 必须位于第一位
print('{0}的分数是:{1}'.format(self.name, self.score))
# 这句的意思是 调用' _int_ '构建函数 ,'self'代表的自己,把student的地址传给'self'
s1 = Student('onepis', 100) # 通过类名()调用构造函数
# s1 就是一个 实例化对象。
onepis=Student('onepis',100)
s1.say_score() # 调用 此方法 输出 分数
# 添加年龄属性 和 工资 属性
s1.age = 32
s1.salary = 3000
print(s1.salary)
# 这叫实际例对象 S2
s2 = Student('litao', 100) # 新建的 s2 里面没 有 age 和 salary
# 所以 下面 5代码 会报错
# 类 创建的 对象s2 里面的 say_score 传递 self (注,self代表的就是实例化出来的对象) 找到 Student .方法(例如say_score)是一个行为,可以被 共享
# print(s2.age) # 报错
s2.say_score()
Student.say_score(s2) # 解释器 实际调用 是这样调用的
print(dir(s1)) # dir 获得对象所有的 属性
print('**********************')
print(s1.__dict__) # 获得我们直观的自己定义的属性
print(isinstance(s2, Student)) # s2是不是 Stundent 这个类型 的 实例对象(就是创造的饼干)
运行结果:
onepis的分数是:100
3000 # salary 工资
litao的分数是:100
litao的分数是:100
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name', 'salary', 'say_score', 'score']
# 调用 dir 查看的所有属性
**********************
# 调用 .__dict__ 查看 我们自己创建的 属性。
{'name': 'onepis', 'score': 100, 'age': 32, 'salary': 3000}
True # 是Student 的 实例化 对象。