python学习笔记(九)面向对象扩展2
Note:
#继续昨天的遗留问题 class human(object): def __init__(self, input_gender):#input_gender 就是你输出的性别 self.gender = input_gender#这里是一个赋值的动作,你输入的性别赋值到self.gender def printgender(self):#定义了打印性别的功能 print (self.gender)#打印self.gender,就是input的性别,input_gender li_lei = human('male')#male 作为一个参数传递给__init__()方法的input_gender变量 print (li_lei.gender) #print (li_lei.printgender()) #输出结果: #male None #跟上面遗留的问题一样 li_lei.printgender() #这里有问题,截图留言给作者,自己搞不懂 #上面那个bound那个,是变量存储在内存中的地址?应该不是C的二进制代码,二进制代码是0101代码 #跟self理解有关,类有属性,所有属于该类共享属性 #self是对象,是不是类里面?对象的性质和类属性 #self是lilei ,赋值完成,让lilei有了gender的性质,但是gender不是human的类属性 #类属性还有一个遗留 #通过对象可以修改类属性值,怎么改? #类属性被所有同一类及其子类的对象共享。类属性值的改变会影响所有的对象 #修改后,因为是共享,改了都会改 class bird(object): have_feather = True way_of_reproduction = '111' def move(self, dx, dy): position = [0,0] position[0] = position[0] + dx position[1] = position[1] + dy return position class chicken(bird): way_of_move = 'walk' possible_in_KFC = True class oriole(bird): way_of_move = 'fly' possible_in_KFC = False #我修改bird属性,chicken oriole的属性也是会修改的 summer = chicken() print (summer.way_of_reproduction)
#输出结果:111 #这里summer 的繁殖就变成了111 ''' 问题: 1.通过对象可以修改类属性值,怎么改?self修改? 2.打印bound.method 3.截图三个打印
'''

20171011更新:
self 是指向human中li_lei这个对象,也就是指向实例
假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。
class test(object): def add(self, a, b): print (a + b) def display(self): print ('hello')
test1 = test()
test1.add(1, 3)
test1.add(1, 3) 经由python转化 为test.add(self, 1, 3),然后就按照def add的功能,执行print (a + b)了
声明add()方法时,若不加self,则报错
Traceback (most recent call last):
File "<pyshell#285>", line 1, in <module>
test1.add(1, 3)
TypeError: add() takes 2 positional arguments but 3 were given

还有另一处资料也写的很详细,是关于__init__()方法的
链接:https://www.crifan.com/summary_the_meaning_of_self_and___init___in_python_and_why_need_them/
作者整理了很多,先备忘
20171013更新
print 返回None值的问题
Python中,当程序执行到return的时候,程序将停止执行函数内余下的语句。
return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None。None是Python中的一个特别的数据类型,用来表示什么都没有
所以截图None值的打印,是函数返回的
浙公网安备 33010602011771号