liyihao

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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值的打印,是函数返回的

 

posted on 2017-10-11 11:03  liyihao  阅读(217)  评论(0)    收藏  举报