print('-->用自己的myself,打开那个%s,%s的%s'% (myself.color, myself.size, myself.boxname))
print('-->用类自己的self,打开那个%s,%s的%s'% (self.color, self.size, self.boxname))
b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。
class 抽象体------》实例化------》对象/实例,含有属性:{'boxname':'魔盒', ‘size’:‘14m’, 'color':'red'},即 self
self 看似是整个对象,实际上清楚地描述了类就是产生对象的过程,描述了 self 就是得到了 对象,所以 self 内的键值可以直接使用
classBox(object):
def myInit(mySelf, boxname, size, color):
mySelf.boxname = boxname
mySelf.size = size
mySelf.color = color # 自己写一个初始化函数,一样奏效,甚至不用self命名。其它函数当中用标准self
returnmySelf # 返回给实例化过程一个对象!神奇!并且含有对象属性/字典
# def __init__(self, boxname, size, color):
# self.boxname = boxname
# self.size = size
# self.color = color #注释掉原来标准的初始化
def open(self, myself):
print(self)
print('-->用自己的myself,打开那个%s,%s的%s'% (myself.color, myself.size, myself.boxname))
print('-->用类自己的self,打开那个%s,%s的%s'% (myself.color, myself.size, myself.boxname))
def close(self):
print('-->关闭%s,谢谢'% self.boxname)
# 经过改造,运行结果和标准初始化没区别
b = Box().myInit('魔盒', '14m', '红色')
# b = Box('魔盒', '14m', '红色')#注释掉原来标准的初始化方法
b.close()
b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。
print(b.__dict__) # 这里返回的就是self本身,self存储属性,没有动作。
换个角度来讲,对类的操作有:
1、定义属性 ; 2、调用方法
对类的反馈有:
1、得到属性 ; 2、执行方法
在 class 类的函数中,为什么 self是必要的,因为 self 是对象的载体,可以理解成一个字典,看下面代码:
classBox(object):
def myInit(mySelf, boxname, size, color):
print(mySelf.__dict__)#显示为{}空字典
mySelf.boxname = boxname
mySelf.__dict__['aa'] = 'w'#甚至可以像字典一样操作
mySelf.size = size
mySelf.color = color # 自己写一个初始化函数,一样奏效,甚至不用self命名。其它函数当中用标准self
returnmySelf # 返回给实例化过程一个对象!神奇!并且含有对象属性/字典
# def __init__(self, boxname, size, color):
# self.boxname = boxname
# self.size = size
# self.color = color #注释掉原来标准的初始化
def open(self, myself):
print(self)
print('-->用自己的myself,打开那个%s,%s的%s'% (myself.color, myself.size, myself.boxname))
print('-->用类自己的self,打开那个%s,%s的%s'% (myself.color, myself.size, myself.boxname))
def close(self):
print('-->关闭%s,谢谢'% self.boxname)
# 经过改造,运行结果和标准初始化没区别
b = Box().myInit('魔盒', '14m', '红色')
# b = Box('魔盒', '14m', '红色')#注释掉原来标准的初始化方法
b.close()
b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。
print(b.__dict__) # 这里返回的就是self本身,self存储属性,没有动作。